zt hace 7 meses
padre
commit
672589b8b5

+ 55 - 48
src/views/flow/definition.vue

@@ -6,12 +6,12 @@
           <el-option v-for="item in dc_data.FLOW_REFERENCE" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
         <el-input v-model="search.flowName" class="ch-input ch-input-size" placeholder="流程名称" size="small" @keyup.enter.native="handleSearch()" />
-        <el-select v-model="search.flowType" clearable filterable placeholder="流程类型" size="small" @change="handleSearch">
-          <el-option v-for="item in dc_data.FLOW_TYPE" :key="item.value" :label="item.label" :value="item.value" />
-        </el-select>
-        <el-select v-model="search.status" clearable filterable placeholder="部署状态" size="small" @change="handleSearch">
-          <el-option v-for="item in dc_data.FLOW_DEPLOY_STATUS" :key="item.value" :label="item.label" :value="item.value" />
-        </el-select>
+<!--        <el-select v-model="search.flowType" clearable filterable placeholder="流程类型" size="small" @change="handleSearch">-->
+<!--          <el-option v-for="item in dc_data.FLOW_TYPE" :key="item.value" :label="item.label" :value="item.value" />-->
+<!--        </el-select>-->
+<!--        <el-select v-model="search.status" clearable filterable placeholder="部署状态" size="small" @change="handleSearch">-->
+<!--          <el-option v-for="item in dc_data.FLOW_DEPLOY_STATUS" :key="item.value" :label="item.label" :value="item.value" />-->
+<!--        </el-select>-->
         <el-button class="ch-button-warning" size="small" @click="handleReset()"><i class="el-icon-search" />&nbsp;重置</el-button>
         <el-button class="ch-button" size="small" @click="handleSearch()"><i class="el-icon-search" />&nbsp;搜索</el-button>
         <el-button class="ch-button-export" size="small" @click="confirmOutput()"><i class="el-icon-download" />&nbsp;导出</el-button>
@@ -24,9 +24,9 @@
           <el-table-column type="index" width="60" />
           <el-table-column label="流程名称" prop="flowName" />
           <el-table-column align="center" header-align="center" label="流程定义" prop="flowDef" />
-          <el-table-column align="center" header-align="center" label="流程类型" prop="flowType" />
+<!--          <el-table-column align="center" header-align="center" label="流程类型" prop="flowType" />-->
           <el-table-column align="center" header-align="center" label="流程文件" prop="flowFile" />
-          <el-table-column align="center" header-align="center" label="部署状态" prop="statusStr" />
+<!--          <el-table-column align="center" header-align="center" label="部署状态" prop="statusStr" />-->
           <el-table-column align="center" header-align="center" label="更新时间" prop="updatedAt" />
           <el-table-column align="center" header-align="center" label="部署">
             <template scope="scope">
@@ -52,7 +52,14 @@
         </div>
       </el-col>
     </el-row>
-    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" top="50px" width="75%" @open="dlgOpen">
+    <el-dialog
+      :title="dialogTitle"
+      :visible.sync="dialogVisible"
+      top="50px"
+      width="75%"
+      @open="dlgOpen"
+      :append-to-body="true"
+    >
       <el-form ref="form" :model="form" :rules="rules" style="width: 100%;padding: 5px">
         <el-row>
           <el-col style="padding-bottom: 10px">
@@ -74,21 +81,21 @@
                   </el-form-item>
                 </el-col>
               </el-row>
-              <el-row>
-                <el-col :span="3" class="col-txt"><span>流程类型</span></el-col>
-                <el-col :span="20" class="col-input">
-                  <el-form-item>
-                    <el-select v-model="form.flowType" clearable filterable placeholder="流程类型">
-                      <el-option
-                        v-for="item in dc_data.FLOW_TYPE"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value"
-                      />
-                    </el-select>
-                  </el-form-item>
-                </el-col>
-              </el-row>
+<!--              <el-row>-->
+<!--                <el-col :span="3" class="col-txt"><span>流程类型</span></el-col>-->
+<!--                <el-col :span="20" class="col-input">-->
+<!--                  <el-form-item>-->
+<!--                    <el-select v-model="form.flowType" clearable filterable placeholder="流程类型">-->
+<!--                      <el-option-->
+<!--                        v-for="item in dc_data.FLOW_TYPE"-->
+<!--                        :key="item.value"-->
+<!--                        :label="item.label"-->
+<!--                        :value="item.value"-->
+<!--                      />-->
+<!--                    </el-select>-->
+<!--                  </el-form-item>-->
+<!--                </el-col>-->
+<!--              </el-row>-->
               <el-row>
                 <el-col :span="3" class="col-txt"><span>流程文件</span></el-col>
                 <el-col :span="20" class="col-input">
@@ -97,29 +104,29 @@
                   </el-form-item>
                 </el-col>
               </el-row>
-              <el-row>
-                <el-col :span="3" class="col-txt"><span>关联业务</span></el-col>
-                <el-col :span="20" class="col-input">
-                  <el-form-item>
-                    <el-select v-model="form.referenceType" clearable filterable placeholder="关联业务">
-                      <el-option
-                        v-for="item in dc_data.FLOW_REFERENCE"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value"
-                      />
-                    </el-select>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row>
-                <el-col :span="3" class="col-txt"><span>关联表单</span></el-col>
-                <el-col :span="20" class="col-input">
-                  <el-form-item>
-                    <el-input v-model="form.referenceForm" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
+<!--              <el-row>-->
+<!--                <el-col :span="3" class="col-txt"><span>关联业务</span></el-col>-->
+<!--                <el-col :span="20" class="col-input">-->
+<!--                  <el-form-item>-->
+<!--                    <el-select v-model="form.referenceType" clearable filterable placeholder="关联业务">-->
+<!--                      <el-option-->
+<!--                        v-for="item in dc_data.FLOW_REFERENCE"-->
+<!--                        :key="item.value"-->
+<!--                        :label="item.label"-->
+<!--                        :value="item.value"-->
+<!--                      />-->
+<!--                    </el-select>-->
+<!--                  </el-form-item>-->
+<!--                </el-col>-->
+<!--              </el-row>-->
+<!--              <el-row>-->
+<!--                <el-col :span="3" class="col-txt"><span>关联表单</span></el-col>-->
+<!--                <el-col :span="20" class="col-input">-->
+<!--                  <el-form-item>-->
+<!--                    <el-input v-model="form.referenceForm" />-->
+<!--                  </el-form-item>-->
+<!--                </el-col>-->
+<!--              </el-row>-->
             </el-card>
           </el-col>
         </el-row>
@@ -299,7 +306,7 @@ export default {
                     }
                     this.opRecord(postData, soaUrl)
                 } else {
-                    //console.log('error submit!!')
+                    // console.log('error submit!!')
                     return false
                 }
             })

+ 2 - 2
src/views/workflow/components/myProcess/applyAddWork.vue

@@ -5,7 +5,7 @@
 	 :close-on-click-modal="false"
 	 :close-on-press-escape="false"
 	 :visible.sync="dialogVisible"
-	 title="发起付款申请1"
+	 title="发起加班申请"
 	 top="50px"
 	 width="75%"
      :append-to-body="true"
@@ -13,7 +13,7 @@
 	>
 		<div class="tabsdom">
 			<el-tabs v-model="activeName" @tab-click="handleClick">
-				<el-tab-pane label="付款申请" name="first">
+				<el-tab-pane label="加班申请" name="first">
 					<el-card shadow="always" style="padding: 15px 5px 5px 15px">
 						<el-row :gutter="15">
 							<el-form ref="elForm" :model="formData" :rules="rules" label-width="100px">

+ 2 - 2
src/views/workflow/components/myProcess/applyAddWorkDetail.vue

@@ -4,7 +4,7 @@
 	 :close-on-click-modal="false"
 	 :close-on-press-escape="false"
 	 :visible.sync="dialogVisible"
-	 title="发起付款申请"
+	 title="发起加班申请"
 	 top="50px"
 	 width="75%"
      :append-to-body="true"
@@ -12,7 +12,7 @@
 	>
 		<div class="tabsdom">
 			<el-tabs v-model="activeName" @tab-click="handleClick">
-				<el-tab-pane label="付款申请" name="first">
+				<el-tab-pane label="加班申请" name="first">
 					<el-card shadow="always" style="padding: 15px 5px 5px 15px">
 						<el-row :gutter="15">
 							<el-form ref="elForm" :model="formData" :rules="rules" label-width="100px">

+ 483 - 0
src/views/workflow/components/myProcess/applyAgainPayment.vue

@@ -0,0 +1,483 @@
+<template>
+	<el-dialog
+	 :close-on-click-modal="false"
+	 :close-on-press-escape="false"
+	 :visible.sync="dialogVisible"
+	 title="付款申请单"
+	 top="50px"
+	 width="75%"
+	>
+		<div class="tabsdom">
+			<el-tabs v-model="activeName" @tab-click="handleClick">
+				<el-tab-pane label="加班申请" name="first">
+					<el-card shadow="always" style="padding: 15px 5px 5px 15px">
+						<el-row :gutter="15">
+							<el-form ref="elForm" :model="formData" :rules="rules" label-width="100px">
+								<el-col :span="24">
+									<el-form-item label="姓名">
+										<el-input v-model="userinfo.truename" placeholder="请输入加班申请" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="所在部门">
+										<el-input v-model="userinfo.deptName" placeholder="请输入所在部门" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="岗位">
+										<el-input v-model="userinfo.postName" placeholder="请输入岗位" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="关联项目" prop="proId">
+										<el-select v-model="formData.proId" filterable placeholder="关联项目名称">
+											<el-option
+											 v-for="item in ProjectData"
+											 :key="item.value"
+											 :label="item.label"
+											 :value="item.value"
+											>
+												<span style="float: left">{{ item.label }}</span>
+												<span style="float: right; color: #8492a6; font-size: 13px">{{
+														item.custname
+													}}</span>
+											</el-option>
+										</el-select>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班事由" prop="applyReasons">
+										<el-input v-model="formData.applyReasons" :autosize="{minRows: 4, maxRows: 4}"
+															placeholder="请输入加班事由"
+															type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班位置" prop="position">
+										<el-radio-group v-model="formData.position" size="medium">
+											<el-radio
+											 v-for="(item, index) in positionOptions"
+											 :key="index" :disabled="item.disabled"
+											 :label="item.value"
+											>
+												{{ item.label }}
+											</el-radio>
+										</el-radio-group>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+
+									<el-form-item label="加班时间">
+										<el-row v-for="(item,index) in applyAddWorkTime">
+											<el-col :span="10">
+												<el-date-picker
+												 v-model="item.startDay"
+												 class="pdr10px mgb10px"
+												 placeholder="选择日期"
+												 type="date"
+
+												 value-format="yyyy-MM-dd"
+												>
+												</el-date-picker>
+											</el-col>
+											<el-col :span="10">
+												<div style="display: flex;align-items: center">
+													<el-time-picker
+													 :disabled="!item.startDay"
+													 @change="getStartTime($event,index)"
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 v-model="item.startTime"
+													 placeholder="开始时间"
+													>
+													</el-time-picker>
+													<div class="zhi">至</div>
+													<el-time-picker
+													 :disabled="!(item.startDay&&item.startTime)"
+													 @input="getEndTime($event,index)"
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 v-model="item.endTime"
+													 placeholder="结束时间"
+													>
+													</el-time-picker>
+												</div>
+											</el-col>
+											<el-col :span="2">
+												<div style="text-align: center">小计{{ item.useTime }}(h)</div>
+											</el-col>
+											<el-col :span="1" class="col-txt" style="text-align: center">
+												&nbsp;
+												<el-button
+												 v-if="index!=0"
+												 circle
+												 icon="el-icon-minus"
+												 @click="spliceListRow(index)"
+												/>
+											</el-col>
+											<el-col :span="1" class="col-txt" style="text-align: center">
+												<el-button
+												 circle
+												 icon="el-icon-plus"
+												 type="primary"
+												 @click="addListRow()"
+												/>
+											</el-col>
+										</el-row>
+										<div class="totalApplyTime">共计加班时长{{ formData.totalAddTime }}(h)</div>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="备注">
+										<el-input
+										 v-model="formData.remark"
+										 :autosize="{minRows: 4, maxRows: 4}"
+										 :style="{width: '100%'}"
+										 placeholder="请输入备注"
+										 type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+							</el-form>
+						</el-row>
+					</el-card>
+				</el-tab-pane>
+				<el-tab-pane label="流程图  " name="second">
+					<add-work-canvas ref="addWorkCanvas"/>
+
+				</el-tab-pane>
+			</el-tabs>
+		</div>
+		<div slot="footer">
+			<el-button @click="dialogVisible=false">取消</el-button>
+
+			<el-button :loading="loading" type="primary" @click="handelConfirm">确定</el-button>
+		</div>
+	</el-dialog>
+
+</template>
+
+<script>
+import { upload } from '@/static/utils/channel'
+import Base from '@/views/base/base'
+import BaseData from '@/views/base/baseData'
+import UserSelect from '@/views/components/UserSelect'
+
+const applyAddWorkTime = { useTime: 0 }
+export default {
+	name: 'ApplyPay',
+	mixins: [Base, BaseData],
+	components: {
+		upload, UserSelect
+	},
+	data() {
+		return {
+			row: {},
+			loading: false,
+			dc_key: ['ORDER_STATUS', 'PAY_TYPE', 'BUDGET_FY'],
+			ProjectData: [],
+			dialogVisible: false,
+			applyAddWorkTime: [{ ...applyAddWorkTime }],
+			formData: {
+				proId: '',
+				totalAddTime: 0,
+				applyReasons: '',
+				position: '',
+				applyAddWorkTime: [
+					{
+						useTime: 0
+					}
+				]
+			},
+			userinfo: {},
+			activeName: 'first',
+			rules: {
+
+				proId: [{
+					required: true,
+					message: '请选择关联项目',
+					trigger: 'change'
+				}],
+				applyReasons: [{
+					required: true,
+					message: '请输入加班事由',
+					trigger: 'change'
+				}],
+				position: [{
+					required: true,
+					message: '加班位置不能为空',
+					trigger: 'change'
+				}]
+
+			},
+
+			positionOptions: [
+				{
+					'label': '公司',
+					'value': 1
+				},
+				{
+					'label': '客户处',
+					'value': 2
+				}, {
+					'label': '居家',
+					'value': 3
+				}]
+		}
+	},
+	computed: {},
+	watch: {
+		'applyAddWorkTime': {
+			deep: true,
+			handler(newValue, oldValue) {
+				let totalAddTime = 0
+				for (let i = 0; i < this.applyAddWorkTime.length; i++) {
+					if (this.applyAddWorkTime[i].useTime === 0 || this.applyAddWorkTime[i].useTime) {
+						totalAddTime = totalAddTime + Number(this.applyAddWorkTime[i].useTime)
+					}
+				}
+				console.log(totalAddTime)
+				this.changeAddWorkTime(totalAddTime.toFixed(1))
+			}
+		}
+	},
+	created() {
+
+	},
+	mounted() {
+
+		this.initDict(this.dc_key).then((res) => {
+		})
+		// this.initProject({ /* signstatus: '2,3'*/ })
+
+	},
+	methods: {
+		handleClick(tab, event) {
+			this.canVasStatus = false
+			if (this.activeName == 'second') {
+				this.canVasStatus = true
+				this.$nextTick(() => {
+					this.$refs.addWorkCanvas.createNodeCanvas(this.row)
+
+				})
+			}
+		},
+		changeAddWorkTime(totalAddTime) {
+			this.formData.totalAddTime = totalAddTime
+		},
+		getHour(s1, s2) {
+			var reDate = /\d{4}-\d{1,2}-\d{1,2} /
+
+			s1 = new Date((reDate.test(s1) ? s1 : '2018-1-1 ' + s1).replace(/-/g, '/'))
+			s2 = new Date((reDate.test(s2) ? s2 : '2018-1-1 ' + s2).replace(/-/g, '/'))
+			var ms = s2.getTime() - s1.getTime()
+			if (ms < 0) return 0
+			console.log(ms)
+
+			return (ms / 1000 / 60 / 60).toFixed(1)  //小时
+		},
+		getTimeRange(event, i) {
+			this.$nextTick(() => {
+				this.applyAddWorkTime[i].startTime = this.applyAddWorkTime[i].startDay + ' ' + event[0] + ':00'
+				this.applyAddWorkTime[i].endTime = this.applyAddWorkTime[i].startDay + ' ' + event[1] + ':00'
+				let timeRang = this.getHour(event[0], event[1])
+				this.applyAddWorkTime[i].useTime = timeRang
+			})
+		},
+		async getUserInfo() {
+			let { data: userinfo } = await this.baseRequest1('ApplyAddWorkController', 'getUserInfoByUserId', { userId: '' })
+			this.userinfo = userinfo
+			console.log(this.userinfo)
+		},
+		baseRequest1(prefix, opUrl, postData) {
+			return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+		},
+		addListRow() {
+			this.applyAddWorkTime.push({ ...applyAddWorkTime })
+		},
+		spliceListRow(index) {
+			this.applyAddWorkTime.splice(index, 1)
+		},
+		async setVisible(status, row) {
+			this.row = row
+			this.activeName = 'first'
+			this.getUserInfo(row.applyUser)
+			let { data } = await this.baseRequest1('ApplyAddWorkController', 'getInfoByFlowMainId', { flowMainId: row.id })
+			this.formData = data
+			this.formData.flowMainId = data.flowMainId
+			this.applyAddWorkTime = data.applyAddWorkTimeList.map((e) => {
+				return {
+					useTime: e.useTime,
+					startDay: this.$common.transDate(e.startDay),
+					timeRange: [this.$common.transMinute(e.startTime), this.$common.transMinute(e.endTime)],
+					startTime: this.$common.transMinute(e.startTime) + ':00',
+					endTime: this.$common.transMinute(e.endTime) + ':00'
+				}
+			})
+			console.log(this.applyAddWorkTime)
+			// flowMainPushId
+			this.dialogVisible = status
+		},
+		onOpen() {
+		},
+		onClose() {
+			this.$refs['elForm'].resetFields()
+		},
+		close() {
+			this.$emit('update:visible', false)
+		},
+		async handelConfirm() {
+			this.$refs['elForm'].validate(async valid => {
+				if (!valid) return
+				let formData = {
+					...this.formData,
+					applyAddWorkTimeString: JSON.stringify(this.applyAddWorkTime)
+				}
+				delete formData.applyAddWorkTime
+				delete formData.applyAddWorkTimeList
+				console.error('formDataformDataformDataformDataformData', formData)
+				this.loading = true
+				let { data } = await this.baseRequest1('ApplyAddWorkController', 'addApplyAddWorkAgain', { ...formData })
+				this.loading = false
+				if (data.code == 200) {
+					this.$message.success('加班申请发起成功')
+					this.dialogVisible = false
+					this.$emit('getData')
+				}
+				this.close()
+			})
+		}
+	}
+}
+
+</script>
+<style lang="scss">
+.cclist {
+	.col-input {
+		padding: 0;
+	}
+}
+
+.pdr10px {
+	padding-right: 10px;
+}
+
+.mgb10px {
+	margin-bottom: 10px;
+}
+
+.mb25 {
+	margin-bottom: 25px;
+}
+
+.pdtopbottom16 {
+	padding: 0px 16px;
+}
+
+.pdtop16px {
+	padding-top: 16px;
+}
+
+.totalApplyTime {
+	font-size: 16px;
+	font-family: 微软雅黑;
+	font-weight: 400;
+	color: #1890FF;
+	text-align: right;
+	margin: 15px 0 15px 0;
+	width: 100%;
+}
+
+.cost_form {
+	.col-input {
+		font-weight: 400;
+	}
+
+	.el-form-item__label .moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		line-height: 40px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+	}
+
+	.moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+
+
+	}
+
+	.moneydetails:before {
+		content: "*";
+		color: #ff4949;
+
+	}
+}
+
+
+.txtc {
+	text-align: center
+}
+
+.ml5 {
+	margin-left: 5px;
+}
+
+.eltype {
+	margin-bottom: 15px;
+}
+
+.tabsdom {
+	.el-input {
+		width: 100%;
+	}
+
+	.el-tabs__header {
+		text-align: center !important;
+		width: 139px !important;
+		text-align: center !important;
+		display: block !important;
+		margin: auto !important;
+		margin-bottom: 15px !important;
+	}
+
+	.el-tabs__nav-wrap::after {
+		display: none;
+	}
+
+	.el-upload {
+		width: 100%;
+	}
+}
+
+.feeMoneyTotal {
+	width: 100%;
+	height: 14px;
+	font-size: 14px;
+	font-weight: 400;
+	color: #1890FF;
+	margin-top: 31px;
+	margin-bottom: 13px;
+}
+</style>
+
+

+ 841 - 0
src/views/workflow/components/myProcess/applyPayment.vue

@@ -0,0 +1,841 @@
+<template>
+    <!--    加班申请单 发起付款申请(不要调用接口的)-->
+
+    <el-dialog
+	 :close-on-click-modal="false"
+	 :close-on-press-escape="false"
+	 :visible.sync="dialogVisible"
+	 title="发起付款申请"
+	 top="50px"
+	 width="75%"
+     :append-to-body="true"
+	 :before-close="beforeClose"
+	>
+		<div class="tabsdom">
+			<el-tabs v-model="activeName" @tab-click="handleClick">
+				<el-tab-pane label="付款申请" name="first">
+					<el-card shadow="always" style="padding: 15px 5px 5px 15px">
+						<el-row :gutter="15">
+							<el-form ref="elForm" :model="formData" :rules="rules" label-width="100px">
+								<el-col :span="24">
+									<el-form-item label="姓名">
+										<el-input v-model="userinfo.truename" placeholder="请输入加班申请" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="所在部门">
+										<el-input v-model="userinfo.deptName" placeholder="请输入所在部门" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="岗位">
+										<el-input v-model="userinfo.postName" placeholder="请输入岗位" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="关联项目" prop="proId">
+										<el-select v-model="formData.proId" filterable placeholder="关联项目名称">
+											<el-option
+											 v-for="item in ProjectData"
+											 :key="item.value"
+											 :label="item.label"
+											 :value="item.value"
+											>
+												<span style="float: left">{{ item.label }}</span>
+												<span style="float: right; color: #8492a6; font-size: 13px">{{
+														item.custname
+													}}</span>
+											</el-option>
+										</el-select>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班事由" prop="applyReasons">
+										<el-input v-model="formData.applyReasons" :autosize="{minRows: 4, maxRows: 4}"
+															placeholder="请输入加班事由"
+															type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班位置" prop="position">
+										<el-radio-group v-model="formData.position" size="medium">
+											<el-radio
+											 v-for="(item, index) in positionOptions"
+											 :key="index" :disabled="item.disabled"
+											 :label="item.value"
+											>
+												{{ item.label }}
+											</el-radio>
+										</el-radio-group>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+
+									<el-form-item label="加班时间">
+										<el-row v-for="(item,index) in applyAddWorkTime">
+											<el-col :span="10">
+												<el-date-picker
+												 v-model="item.startDay"
+												 class="pdr10px mgb10px"
+												 placeholder="选择日期"
+												 type="date"
+
+												 value-format="yyyy-MM-dd"
+												>
+												</el-date-picker>
+											</el-col>
+											<el-col :span="10">
+												<div style="display: flex;align-items: center">
+													<el-time-picker
+													 :disabled="!item.startDay"
+													 @change="getStartTime($event,index)"
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 v-model="item.startTime"
+													 placeholder="开始时间"
+													>
+													</el-time-picker>
+													<div class="zhi">至</div>
+													<el-time-picker
+													 :disabled="!(item.startDay&&item.startTime)"
+													 @input="getEndTime($event,index)"
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 v-model="item.endTime"
+													 placeholder="结束时间"
+													>
+													</el-time-picker>
+												</div>
+											</el-col>
+											<!--											<el-col :span="10">-->
+											<!--												<el-time-picker-->
+											<!--												 v-model="item.timeRange"-->
+											<!--												 :disabled="!item.startDay"-->
+											<!--												 class="el-input pdr10px mgb10px"-->
+											<!--												 clearable-->
+											<!--												 end-placeholder="结束时间"-->
+											<!--												 format="HH:mm"-->
+											<!--												 is-range-->
+											<!--												 range-separator="至"-->
+											<!--												 start-placeholder="开始时间"-->
+											<!--												 value-format="HH:mm"-->
+											<!--												 @change="getTimeRange($event,index)"-->
+											<!--												/>-->
+											<!--											</el-col>-->
+											<el-col :span="2">
+												<div style="text-align: center">小计{{ item.useTime }}(h)</div>
+											</el-col>
+											<el-col :span="1" class="col-txt" style="text-align: center">
+												&nbsp;
+												<el-button
+												 v-if="index!=0"
+												 circle
+												 icon="el-icon-minus"
+												 @click="spliceListRow(index)"
+												/>
+											</el-col>
+											<el-col :span="1" class="col-txt" style="text-align: center">
+												<el-button
+												 circle
+												 icon="el-icon-plus"
+												 type="primary"
+												 @click="addListRow()"
+												/>
+											</el-col>
+										</el-row>
+										<div class="totalApplyTime">共计加班时长{{ formData.totalAddTime }}(h)</div>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="备注">
+										<el-input
+										 v-model="formData.remark"
+										 :autosize="{minRows: 4, maxRows: 4}"
+										 :style="{width: '100%'}"
+										 placeholder="请输入备注"
+										 type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+							</el-form>
+						</el-row>
+					</el-card>
+				</el-tab-pane>
+				<el-tab-pane label="流程图  " name="second">
+					<div style="width: 100%">
+						<el-row>
+							<el-col :span="24">
+								<div class="node_info">
+									<div>节点说明:</div>
+									<div class="dis_flex" v-for="item in nodeColor">
+										<div class="node_class" :style="{backgroundColor: item.nodeback}"></div>
+										{{ item.name }}
+
+									</div>
+								</div>
+								<div id="containeraddwork" style="width: 100%" v-show="true"></div>
+							</el-col>
+						</el-row>
+					</div>
+				</el-tab-pane>
+			</el-tabs>
+		</div>
+		<div slot="footer">
+			<el-button @click="dialogVisible=false">取消</el-button>
+
+			<el-button :loading="loading" type="primary" @click="handelConfirm">确定</el-button>
+		</div>
+	</el-dialog>
+
+</template>
+
+<script>
+import { upload } from '@/static/utils/channel'
+import Base from '@/views/base/base'
+import BaseData from '@/views/base/baseData'
+import UserSelect from '@/views/components/UserSelect'
+import * as echarts from 'echarts'
+
+const lineStyle = {
+	color: '#00116a',
+	width: 2
+
+}
+const redLinestyle = {
+	color: 'red',
+	width: 2
+}
+const applyAddWorkTime = { useTime: 0 }
+export default {
+	name: 'ApplyPay',
+	mixins: [Base, BaseData],
+	components: {
+		upload, UserSelect
+	},
+	data() {
+		return {
+			loading: false,
+			nodeColor: [
+				{ name: '审核通过', nodeback: '#2A3980' },
+				{ name: '未经过', nodeback: '#999999' },
+				{ name: '退回', nodeback: '#E04242' },
+				{ name: '审核中', nodeback: '#E08E42' },
+				{ name: '撤回', nodeback: '#4294E0' }
+			],
+			dc_key: ['ORDER_STATUS', 'PAY_TYPE', 'BUDGET_FY'],
+			ProjectData: [],
+			dialogVisible: false,
+			applyAddWorkTime: [{ ...applyAddWorkTime }],
+			formData: {
+				proId: '',
+				totalAddTime: 0,
+				applyReasons: '',
+				position: '',
+				applyAddWorkTime: [
+					{
+						useTime: 0
+					}
+				]
+			},
+			userinfo: {},
+			activeName: 'first',
+			rules: {
+
+				proId: [{
+					required: true,
+					message: '请选择关联项目',
+					trigger: 'change'
+				}],
+				applyReasons: [{
+					required: true,
+					message: '请输入加班事由',
+					trigger: 'change'
+				}],
+				position: [{
+					required: true,
+					message: '加班位置不能为空',
+					trigger: 'change'
+				}]
+
+			},
+
+			positionOptions: [
+				{
+					'label': '公司',
+					'value': 1
+				},
+				{
+					'label': '客户处',
+					'value': 2
+				}, {
+					'label': '居家',
+					'value': 3
+				}],
+			nodes: [ // 节点
+				{
+					name: '申请人发起',
+					value: [45, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					name: '直接上级审核',
+					value: [125, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					name: '部门负责人审核',
+					value: [205, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					name: '分管领导审核',
+					value: [285, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					name: '上级分管领导\n审核',
+					value: [365, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					name: '主要领导\n审核',
+					value: [445, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					name: '结束',
+					value: [525, 100],
+					symbol: 'image://' + require('../asste/huifangkuai.png'),
+					symbolSize: [110, 60]
+				},
+				{
+					label: {
+						show: true,
+						color: 'red', // 节点文字颜色
+						backgroundColor: '#f5f5f5'
+					},
+					itemStyle: {
+						color: '#f5f5f5'
+					},
+					name: '退回发起人',
+					value: [350, 400],
+					symbolSize: [70, 20]
+				},
+				{
+					label: {
+						show: true,
+						color: 'red', // 节点文字颜色
+						backgroundColor: '#f5f5f5'
+					},
+					itemStyle: {
+						color: '#f5f5f5'
+					},
+					name: '  退回发起人  ',
+					value: [300, 350],
+					symbolSize: [20, 20]
+				},
+				{
+					label: {
+						show: true,
+						color: 'red', // 节点文字颜色
+						backgroundColor: '#f5f5f5'
+					},
+					itemStyle: {
+						color: '#f5f5f5'
+					},
+					name: ' 退回发起人 ',
+					value: [250, 300],
+					symbolSize: [20, 20]
+				},
+				{
+					label: {
+						show: true,
+						color: 'red', // 节点文字颜色
+						backgroundColor: '#f5f5f5'
+					},
+					itemStyle: {
+						color: '#f5f5f5'
+					},
+					name: ' 退回发起人  ',
+					value: [250, 300],
+					symbolSize: [20, 20]
+				},
+				{
+					label: {
+						show: true,
+						color: 'red', // 节点文字颜色
+						backgroundColor: '#f5f5f5'
+					},
+					itemStyle: {
+						color: '#f5f5f5'
+					},
+					name: ' 退回发起人   ',
+					value: [175, 250],
+					symbolSize: [20, 20]
+				},
+				{
+					label: {
+						show: true,
+						color: 'red', // 节点文字颜色
+						backgroundColor: '#f5f5f5'
+					},
+					itemStyle: {
+						color: '#f5f5f5'
+					},
+					name: '  退回发起人   ',
+					value: [100, 200],
+					symbolSize: [20, 20]
+				}
+			],
+			linesData: [ // 连线
+
+				{
+					lineStyle: lineStyle,
+					coords: [[45, 100], [105, 100]]
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[125, 100], [185, 100]]
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[205, 100], [265, 100]]
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[285, 100], [345, 100]]
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[365, 100], [425, 100]]
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[445, 100], [505, 100]]
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[450, 100], [450, 400]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[370, 100], [370, 350]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[290, 100], [290, 300]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[210, 100], [210, 250]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[130, 100], [130, 200]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[50, 100], [50, 400]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[450, 400], [50, 400]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[370, 350], [50, 350]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[290, 300], [50, 300]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[210, 250], [50, 250]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[130, 200], [50, 200]],
+					symbol: 'none'
+				},
+				{
+					lineStyle: lineStyle,
+					coords: [[50, 150], [50, 150]],
+					symbol: 'none'
+				}
+
+			]
+		}
+	},
+	computed: {},
+	watch: {
+		'applyAddWorkTime': {
+			deep: true,
+			handler(newValue, oldValue) {
+				let totalAddTime = 0
+				console.log(this.applyAddWorkTime)
+				try {
+
+					for (let i = 0; i < this.applyAddWorkTime.length; i++) {
+						if (this.applyAddWorkTime[i].useTime === 0 || this.applyAddWorkTime[i].useTime) {
+							totalAddTime = totalAddTime + Number(this.applyAddWorkTime[i].useTime)
+						}
+					}
+					console.log(totalAddTime)
+					this.changeAddWorkTime(totalAddTime.toFixed(1))
+				} catch (e) {
+					console.log(e)
+				}
+			}
+		}
+	},
+	created() {
+
+	},
+	mounted() {
+
+		this.initDict(this.dc_key).then((res) => {
+		})
+		// this.initProject({ /* signstatus: '2,3'*/ })
+
+	},
+	methods: {
+		beforeClose() {
+
+			this.applyAddWorkTime = [{ ...applyAddWorkTime }],
+			 this.formData = {
+				 proId: '',
+				 totalAddTime: 0,
+				 applyReasons: '',
+				 position: '',
+				 applyAddWorkTime: [
+					 {
+						 useTime: 0
+					 }
+				 ]
+			 }
+			this.dialogVisible = false
+			this.activeName = 'first'
+			this.$forceUpdate()
+		},
+		handleClick(tab, event) {
+			if (this.activeName == 'second') this.createNodeCanvas()
+		},
+		createNodeCanvas() {
+			this.$nextTick(() => {
+				let chartDom = document.getElementById('containeraddwork')
+				var myCharts = echarts.init(chartDom)
+				let charts = {
+					nodes: this.nodes,
+					linesData: this.linesData
+				}
+				let option = {
+					xAxis: {
+						min: 0,
+						max: 600,
+						padding: [0, 50, 0, 50],
+						show: false,
+						type: 'value'
+					},
+					yAxis: {
+						min: 0,
+						max: 450,
+						show: false,
+						type: 'value'
+					},
+					grid: {
+						left: 50,
+						right: 0,
+						bottom: 0,
+						top: 0
+					},
+
+					series: [
+						{
+							type: 'graph',
+							coordinateSystem: 'cartesian2d',
+							symbol: 'rect',
+							symbolSize: [80, 40],
+							itemStyle: {
+								color: 'rgb(225,7,7)'
+							},
+							symbolOffset: [10, 0],
+							// force: {
+							//  edgeLength: 100,//连线的长度
+							//  repulsion: 200 //子节点之间的间距
+							// },
+
+							label: {
+								show: true,
+								color: 'white' // 节点文字颜色
+							},
+
+							data: charts.nodes
+
+						},
+
+						{
+							type: 'lines',
+							polyline: false,
+							coordinateSystem: 'cartesian2d',
+							symbol: ['', 'arrow'],
+							symbolSize: 10,
+							data: charts.linesData
+
+						}
+
+					]
+
+				}
+				myCharts.clear()
+
+				myCharts.setOption(option)
+				window.addEventListener('resize', () => {
+					myCharts.resize()
+				})
+			})
+		},
+		changeAddWorkTime(totalAddTime) {
+			this.formData.totalAddTime = totalAddTime
+		},
+		getHour(s1, s2) {
+			var reDate = /\d{4}-\d{1,2}-\d{1,2} /
+
+			s1 = new Date((reDate.test(s1) ? s1 : '2018-1-1 ' + s1).replace(/-/g, '/'))
+			s2 = new Date((reDate.test(s2) ? s2 : '2018-1-1 ' + s2).replace(/-/g, '/'))
+			var ms = s2.getTime() - s1.getTime()
+			if (ms < 0) return 0
+			console.log(ms)
+
+			return (ms / 1000 / 60 / 60).toFixed(1)  //小时
+		},
+		getEndTime(event, index) {
+			console.log(event)
+			this.$nextTick(() => {
+				if (event) {
+					this.applyAddWorkTime[index].endTime = this.applyAddWorkTime[index].startDay + ' ' + this.applyAddWorkTime[index].endTime + ':00'
+					this.applyAddWorkTime[index].useTime = this.getHour(this.applyAddWorkTime[index].startTime, this.applyAddWorkTime[index].endTime)
+				}
+			})
+		},
+		getStartTime(event, index) {
+			this.$nextTick(() => {
+				this.applyAddWorkTime[index].startTime = this.applyAddWorkTime[index].startDay + ' ' + this.applyAddWorkTime[index].startTime + ':00'
+				this.applyAddWorkTime[index].endTime = null
+				this.applyAddWorkTime[index].useTime = 0
+			})
+		},
+		getTimeRange(event, index) {
+			this.$nextTick(() => {
+				console.log(event)
+				if (event) {
+					this.applyAddWorkTime[index].startTime = this.applyAddWorkTime[index].startDay + ' ' + event[0] + ':00'
+					this.applyAddWorkTime[index].endTime = this.applyAddWorkTime[index].startDay + ' ' + event[1] + ':00'
+					this.applyAddWorkTime[index].useTime = this.getHour(event[0], event[1])
+				} else {
+					this.applyAddWorkTime[index].useTime = 0
+				}
+			})
+		},
+		async getUserInfo() {
+			let { data: userinfo } = await this.baseRequest1('ApplyAddWorkController', 'getUserInfoByUserId', { userId: '' })
+			this.userinfo = userinfo
+			console.log(this.userinfo)
+		},
+		baseRequest1(prefix, opUrl, postData) {
+			return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+		},
+		addListRow() {
+			this.applyAddWorkTime.push({ ...applyAddWorkTime })
+		},
+		spliceListRow(index) {
+			this.applyAddWorkTime.splice(index, 1)
+		},
+		setVisible(status) {
+
+			this.getUserInfo()
+			this.dialogVisible = status
+		},
+		onOpen() {
+		},
+		onClose() {
+			this.$refs['elForm'].resetFields()
+		},
+		close() {
+			this.$emit('update:visible', false)
+		},
+		async handelConfirm() {
+			this.$refs['elForm'].validate(async valid => {
+				if (!valid) return
+				let formData = {
+					...this.formData,
+					applyAddWorkTimeString: JSON.stringify(this.applyAddWorkTime)
+				}
+				delete formData.applyAddWorkTime
+				this.loading = true
+				let { data } = await this.baseRequest1('ApplyAddWorkController', 'addApplyAddWork', { ...formData })
+				if (data.code == 200) {
+					this.loading = false
+					this.$message.success('加班申请发起成功')
+					this.dialogVisible = false
+					this.$emit('getData')
+				}
+				this.close()
+			})
+		}
+	}
+}
+
+</script>
+<style lang="scss">
+.cclist {
+	.col-input {
+		padding: 0;
+	}
+}
+
+#containeraddwork {
+	height: 600px;
+	width: 100%;
+	background: #F5F5F5;
+}
+
+.pdr10px {
+	padding-right: 10px;
+}
+
+.mgb10px {
+	margin-bottom: 10px;
+}
+
+.mb25 {
+	margin-bottom: 25px;
+}
+
+.pdtopbottom16 {
+	padding: 0px 16px;
+}
+
+.pdtop16px {
+	padding-top: 16px;
+}
+
+.totalApplyTime {
+	font-size: 16px;
+	font-family: 微软雅黑;
+	font-weight: 400;
+	color: #1890FF;
+	text-align: right;
+	margin: 15px 0 15px 0;
+	width: 100%;
+}
+
+.cost_form {
+	.col-input {
+		font-weight: 400;
+	}
+
+	.el-form-item__label .moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		line-height: 40px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+	}
+
+	.moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+
+
+	}
+
+	.moneydetails:before {
+		content: "*";
+		color: #ff4949;
+
+	}
+}
+
+
+.txtc {
+	text-align: center
+}
+
+.ml5 {
+	margin-left: 5px;
+}
+
+.eltype {
+	margin-bottom: 15px;
+}
+
+.tabsdom {
+	.el-input {
+		width: 100%;
+	}
+
+	.el-tabs__header {
+		text-align: center !important;
+		width: 139px !important;
+		text-align: center !important;
+		display: block !important;
+		margin: auto !important;
+		margin-bottom: 15px !important;
+	}
+
+	.el-tabs__nav-wrap::after {
+		display: none;
+	}
+
+	.el-upload {
+		width: 100%;
+	}
+}
+
+.feeMoneyTotal {
+	width: 100%;
+	height: 14px;
+	font-size: 14px;
+	font-weight: 400;
+	color: #1890FF;
+	margin-top: 31px;
+	margin-bottom: 13px;
+}
+</style>
+
+

+ 541 - 0
src/views/workflow/components/myProcess/applyPaymentConfirm.vue

@@ -0,0 +1,541 @@
+<template>
+	<el-dialog
+	 :close-on-click-modal="false"
+	 :close-on-press-escape="false"
+	 :visible.sync="dialogVisible"
+	 title="付款申请单-审核"
+	 top="50px"
+	 width="75%"
+     :append-to-body="true"
+    >
+		<div class="tabsdom">
+			<el-tabs v-model="activeName" @tab-click="handleClick">
+				<el-tab-pane label="加班申请" name="first">
+					<el-card shadow="always" style="padding: 15px 5px 5px 15px">
+						<el-row :gutter="15">
+							<el-form ref="elForm" :model="formData" :rules="rules" label-width="100px">
+								<el-col :span="24">
+									<el-form-item label="姓名">
+										<el-input v-model="userinfo.truename" placeholder="请输入加班申请" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="所在部门">
+										<el-input v-model="userinfo.deptName" placeholder="请输入所在部门" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="岗位">
+										<el-input v-model="userinfo.postName" placeholder="暂无岗位" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="关联项目" prop="proId">
+										<el-select v-model="formData.proId" disabled filterable placeholder="关联项目名称">
+											<el-option
+											 v-for="item in ProjectData"
+											 :key="item.value"
+											 :label="item.label"
+											 :value="item.value"
+											>
+												<span style="float: left">{{ item.label }}</span>
+												<span style="float: right; color: #8492a6; font-size: 13px">{{
+														item.custname
+													}}</span>
+											</el-option>
+										</el-select>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班事由" prop="applyReasons">
+										<el-input v-model="formData.applyReasons" :autosize="{minRows: 4, maxRows: 4}"
+															placeholder="请输入加班事由" readonly
+															type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班位置" prop="position">
+										<el-radio-group v-model="formData.position" disabled size="medium">
+											<el-radio
+											 v-for="(item, index) in positionOptions"
+											 :key="index" :disabled="item.disabled"
+											 :label="item.value"
+											>
+												{{ item.label }}
+											</el-radio>
+										</el-radio-group>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+
+									<el-form-item label="加班时间">
+										<el-row v-for="(item,index) in applyAddWorkTime">
+											<el-col :span="10">
+												<el-date-picker
+												 v-model="item.startDay"
+												 class="pdr10px "
+												 disabled
+												 placeholder="选择日期"
+												 type="date"
+
+												 value-format="yyyy-MM-dd"
+												>
+												</el-date-picker>
+											</el-col>
+											<el-col :span="10">
+												<div style="display: flex;align-items: center">
+													<el-time-picker
+													 disabled
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 v-model="item.startTime"
+													 placeholder="开始时间"
+													>
+													</el-time-picker>
+													<div class="zhi">至</div>
+													<el-time-picker
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 disabled
+													 v-model="item.endTime"
+													 placeholder="结束时间"
+													>
+													</el-time-picker>
+												</div>
+											</el-col>
+											<el-col :span="4">
+												<div style="text-align: center">小计{{ item.useTime }}(h)</div>
+											</el-col>
+										</el-row>
+										<div class="totalApplyTime" style="margin: 0">共计加班时长{{ formData.totalAddTime }}(h)</div>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="备注">
+										<el-input
+										 v-model="formData.remark"
+										 :autosize="{minRows: 4, maxRows: 4}"
+										 :style="{width: '100%'}"
+										 placeholder="请输入备注"
+										 type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+							</el-form>
+						</el-row>
+
+						<h3>流程历史</h3>
+						<div class="tableDom">
+							<el-table
+							 :data="tableData"
+							 :header-cell-style="{
+                  background:'#1890FF !important',
+                  color:'white'
+                }"
+							 border
+							 style="width: 100%"
+							>
+								<el-table-column fixed label="序号" type="index" width="60"/>
+								<el-table-column
+								 label="节点名称"
+								 prop="nodeName"
+								 width="180"
+								/>
+								<el-table-column
+								 label="处理人"
+								 prop="auditUserName"
+								 width="180"
+								/>
+								<el-table-column
+								 label="审核结果"
+								 prop="auditResultString"
+								/>
+								<el-table-column
+								 label="审核意见"
+								 prop="auditContent"
+								/>
+								<el-table-column
+								 label="发起/审核时间"
+								 prop="createdAt"
+								>
+									<template slot-scope="scope">
+										{{ $common.transTime(scope.row.createdAt) }}
+									</template>
+								</el-table-column>
+							</el-table>
+						</div>
+
+						<h3>处理</h3>
+						<el-card shadow="always" style="padding: 0px 5px 5px 15px">
+							<el-form
+							 ref="confirmForm"
+							 :model="confirmForm"
+							 class="cost_form"
+							 label-width="100px"
+							 style="width: 100%;padding: 5px"
+							>
+								<el-row :gutter="10">
+									<el-col :span="24">
+										<el-form-item label="处理结果" style="margin-bottom: 15px">
+											<el-radio-group v-model="confirmForm.confirmResult">
+												<el-radio :label="1">同意</el-radio>
+												<el-radio v-if="argeeNoStatus" :label="2">退回发起人</el-radio>
+												<el-radio v-if="argeeBackStatus" :label="3">退回上节点</el-radio>
+												<!--	c<el-radio :label="4">结束流程</el-radio>-->
+
+
+											</el-radio-group>
+										</el-form-item>
+									</el-col>
+
+									<el-col :span="24">
+										<el-form-item label="处理意见">
+											<el-input v-model="confirmForm.confirmContent" style="margin-top:10px" type="textarea"/>
+											<el-dropdown size="mini" split-button trigger="hover" type="primary">
+												常用语选择
+												<el-dropdown-menu slot="dropdown">
+													<el-dropdown-item
+													 v-for="item in dc_data.COMMON_PHRASES"
+													 @click.native="selectCommonPhrases(item.label)"
+													>
+														{{ item.label }}
+													</el-dropdown-item>
+
+												</el-dropdown-menu>
+											</el-dropdown>
+										</el-form-item>
+									</el-col>
+								</el-row>
+								<el-col :span="24">
+									<el-form-item label="审核人抄送">
+										<user-select
+										 :default-select="confirmList"
+										 :multiple="true"
+										 class="cclist"
+										 @selectValue="parentMethod"
+										/>
+									</el-form-item>
+								</el-col>
+							</el-form>
+						</el-card>
+
+					</el-card>
+
+				</el-tab-pane>
+				<el-tab-pane label="流程图  " name="second">
+					<add-work-canvas ref="addWorkCanvas"/>
+				</el-tab-pane>
+			</el-tabs>
+		</div>
+		<div slot="footer">
+			<el-button @click="dialogVisible=false">取消</el-button>
+			<el-button type="primary" @click="handelConfirm">确定</el-button>
+		</div>
+	</el-dialog>
+
+</template>
+
+<script>
+import { upload } from '@/static/utils/channel'
+import Base from '@/views/base/base'
+import BaseData from '@/views/base/baseData'
+import UserSelect from '@/views/components/UserSelect'
+import addWorkCanvas from '@/views/workflow/components/myProcess/addWorkCanvas.vue'
+
+const applyAddWorkTime = { useTime: 0 }
+export default {
+	name: 'ApplyPay',
+	mixins: [Base, BaseData],
+	components: {
+		upload,
+		UserSelect, addWorkCanvas
+	},
+	data() {
+		return {
+			row: {},
+			confirmList: [],
+			selectList: [],
+
+			argeeBackStatus: false,
+			argeeNoStatus: false,
+			tableData: [],
+			flowHistroy: [],
+			confirmForm: {
+				confirmContent: '',
+				confirmResult: 1
+			},
+			dc_key: ['ORDER_STATUS', 'PAY_TYPE', 'BUDGET_FY', 'COMMON_PHRASES'],
+			ProjectData: [],
+			dialogVisible: false,
+			applyAddWorkTime: [{ ...applyAddWorkTime }],
+			formData: {
+				proId: '',
+				totalAddTime: 0,
+				applyReasons: '',
+				position: '',
+				applyAddWorkTime: [
+					{
+						useTime: 0
+					}
+				]
+			},
+
+			userinfo: {},
+			activeName: 'first',
+			rules: {
+
+				proId: [{
+					required: true,
+					message: '请选择关联项目',
+					trigger: 'change'
+				}],
+				applyReasons: [{
+					required: true,
+					message: '请输入加班事由',
+					trigger: 'change'
+				}],
+				position: [{
+					required: true,
+					message: '加班位置不能为空',
+					trigger: 'change'
+				}]
+
+			},
+
+			positionOptions: [
+				{
+					'label': '公司',
+					'value': 1
+				},
+				{
+					'label': '客户处',
+					'value': 2
+				}, {
+					'label': '居家',
+					'value': 3
+				}]
+		}
+	},
+	computed: {},
+	watch: {
+		'applyAddWorkTime': {
+			deep: true,
+			handler(newValue, oldValue) {
+				let totalAddTime = 0
+				for (let i = 0; i < this.applyAddWorkTime.length; i++) {
+					if (this.applyAddWorkTime[i].useTime === 0 || this.applyAddWorkTime[i].useTime) {
+						totalAddTime = totalAddTime + Number(this.applyAddWorkTime[i].useTime)
+					}
+				}
+				console.log(totalAddTime)
+				this.changeAddWorkTime(totalAddTime.toFixed(1))
+			}
+		}
+	},
+	created() {
+	},
+	mounted() {
+		this.initDict(this.dc_key).then((res) => {
+			// this.initProject({ /* signstatus: '2,3'*/ })
+		})
+	},
+	methods: {
+		handleClick(tab, event) {
+			this.canVasStatus = false
+			if (this.activeName == 'second') {
+				this.canVasStatus = true
+				this.$nextTick(() => {
+					this.$refs.addWorkCanvas.createNodeCanvas(this.row)
+
+				})
+			}
+		},
+		parentMethod(val) {
+			if (val.length > 0) {
+				this.confirmForm.ccList = val.join(',')
+			}
+		},
+		selectCommonPhrases(e) {
+			if (!this.confirmForm.confirmContent) this.confirmForm.confirmContent = ''
+		},
+		changeAddWorkTime(totalAddTime) {
+			this.formData.totalAddTime = totalAddTime
+		},
+		async getUserInfo(applyUser) {
+
+			let { data: userinfo } = await this.baseRequest1('ApplyAddWorkController', 'getUserInfoByUserId', { userId: applyUser })
+			this.userinfo = userinfo
+			console.log(this.userinfo)
+		},
+		spliceListRow(index) {
+			this.formData.workTimeList.splice(index, 1)
+		},
+		async setVisible(status, row) {
+			this.activeName = 'first'
+			this.row = row
+			this.getUserInfo(row.applyUser)
+			this.confirmForm.flowMainPushId = row.flowMainPushId
+			let { data } = await this.baseRequest1('ApplyAddWorkController', 'getInfoByFlowMainPushId', { flowMainPushId: row.flowMainPushId })
+			const { data: flowHistroy } = await this.baseRequest1('FlowMainController', 'getFlowHistroyByFlowMainId', { flowMainId: row.id })
+			const noAndbackstatus = await this.baseRequest1('FlowMainController', 'getOutgoingFlowsByFlowMainPushId', { flowMainPushId: row.flowMainPushId })
+			for (let i = 0; i < noAndbackstatus.data.length; i++) {
+				if (noAndbackstatus.data[i].conditionExpression == '${agree==\'no\'}') this.argeeNoStatus = true
+				if (noAndbackstatus.data[i].conditionExpression == '${agree==\'back\'}') this.argeeBackStatus = true
+			}
+			this.tableData = flowHistroy
+			this.formData = data
+
+			this.applyAddWorkTime = data.applyAddWorkTimeList.map((e) => {
+				return {
+					useTime: e.useTime,
+					startDay: this.$common.transDate(e.startDay),
+					startTime: this.$common.transMinute(e.startTime),
+					endTime: this.$common.transMinute(e.endTime)
+				}
+			})
+			console.log(this.applyAddWorkTime)
+			// flowMainPushId
+			this.dialogVisible = status
+		},
+		baseRequest1(prefix, opUrl, postData) {
+			return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+		},
+
+		async handelConfirm() {
+			this.$refs['elForm'].validate(async valid => {
+				// if (!valid) return
+				// ApplyAddWorkController/AddConfirmResultAddWork
+				console.log(this.confirmForm)
+				const { data } = await this.baseRequest1('ApplyAddWorkController', 'AddConfirmResultAddWork', { ...this.confirmForm })
+				if (data.code == 200) {
+					this.$message.success('处理成功')
+					this.form = {}
+					this.confirmForm = { confirmContent: '' }
+					this.dialogVisible = false
+					this.$emit('getData')
+				}
+			})
+		}
+	}
+}
+
+</script>
+<style lang="scss">
+.cclist {
+	.col-input {
+		padding: 0;
+	}
+}
+
+.pdr10px {
+	padding-right: 10px;
+}
+
+.mgb10px {
+	margin-bottom: 10px;
+}
+
+.mb25 {
+	margin-bottom: 25px;
+}
+
+.pdtopbottom16 {
+	padding: 0px 16px;
+}
+
+.pdtop16px {
+	padding-top: 16px;
+}
+
+
+.cost_form {
+	.col-input {
+		font-weight: 400;
+	}
+
+	.el-form-item__label .moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		line-height: 40px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+	}
+
+	.moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+
+
+	}
+
+	.moneydetails:before {
+		content: "*";
+		color: #ff4949;
+
+	}
+}
+
+
+.txtc {
+	text-align: center
+}
+
+.ml5 {
+	margin-left: 5px;
+}
+
+.eltype {
+	margin-bottom: 15px;
+}
+
+.tabsdom {
+	.el-input {
+		width: 100%;
+	}
+
+	.el-tabs__header {
+		text-align: center !important;
+		width: 139px !important;
+		text-align: center !important;
+		display: block !important;
+		margin: auto !important;
+		margin-bottom: 15px !important;
+	}
+
+	.el-tabs__nav-wrap::after {
+		display: none;
+	}
+
+	.el-upload {
+		width: 100%;
+	}
+}
+
+.feeMoneyTotal {
+	width: 100%;
+	height: 14px;
+	font-size: 14px;
+	font-weight: 400;
+	color: #1890FF;
+	margin-top: 31px;
+	margin-bottom: 13px;
+}
+</style>

+ 591 - 0
src/views/workflow/components/myProcess/applyPaymentDetail.vue

@@ -0,0 +1,591 @@
+<template>
+<!--    加班申请单-详情改造 发起付款申请(要调用接口的)-->
+	<el-dialog
+	 :close-on-click-modal="false"
+	 :close-on-press-escape="false"
+	 :visible.sync="dialogVisible"
+	 title="发起付款申请"
+	 top="50px"
+	 width="75%"
+     :append-to-body="true"
+     :before-close="closeDialog"
+	>
+		<div class="tabsdom">
+			<el-tabs v-model="activeName" @tab-click="handleClick">
+				<el-tab-pane label="付款申请" name="first">
+					<el-card shadow="always" style="padding: 15px 5px 5px 15px">
+						<el-row :gutter="15">
+							<el-form ref="elForm" :model="formData" :rules="rules" label-width="100px">
+								<el-col :span="24">
+									<el-form-item label="姓名">
+										<el-input v-model="userinfo.truename" placeholder="请输入加班申请" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="所在部门">
+										<el-input v-model="userinfo.deptName" placeholder="请输入所在部门" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label="岗位">
+										<el-input v-model="userinfo.postName" placeholder="暂无岗位" readonly>
+										</el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="关联项目" prop="proId">
+										<el-select v-model="formData.proId" disabled filterable placeholder="关联项目名称">
+											<el-option
+											 v-for="item in ProjectData"
+											 :key="item.value"
+											 :label="item.label"
+											 :value="item.value"
+											>
+												<span style="float: left">{{ item.label }}</span>
+												<span style="float: right; color: #8492a6; font-size: 13px">{{
+														item.custname
+													}}</span>
+											</el-option>
+										</el-select>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班事由" prop="applyReasons">
+										<el-input v-model="formData.applyReasons" :autosize="{minRows: 4, maxRows: 4}"
+															placeholder="请输入加班事由" readonly
+															type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="加班位置" prop="position">
+										<el-radio-group v-model="formData.position" disabled size="medium">
+											<el-radio
+											 v-for="(item, index) in positionOptions"
+											 :key="index" :disabled="item.disabled"
+											 :label="item.value"
+											>
+												{{ item.label }}
+											</el-radio>
+										</el-radio-group>
+									</el-form-item>
+								</el-col>
+								<el-col :span="24">
+
+									<el-form-item label="加班时间">
+										<el-row v-for="(item,index) in applyAddWorkTime">
+											<el-col :span="10">
+												<el-date-picker
+												 v-model="item.startDay"
+												 class="pdr10px"
+												 disabled
+												 placeholder="选择日期"
+												 type="date"
+												 value-format="yyyy-MM-dd"
+												>
+												</el-date-picker>
+											</el-col>
+											<el-col :span="10">
+												<div style="display: flex;align-items: center">
+													<el-time-picker
+													 disabled
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 v-model="item.startTime"
+													 placeholder="开始时间"
+													>
+													</el-time-picker>
+													<div class="zhi">至</div>
+													<el-time-picker
+													 value-format="HH:mm"
+													 format="HH:mm"
+													 disabled
+													 v-model="item.endTime"
+													 placeholder="结束时间"
+													>
+													</el-time-picker>
+												</div>
+											</el-col>
+											<!--											<el-col :span="10">-->
+											<!--												<el-time-picker-->
+											<!--												 v-model="item.timeRange"-->
+											<!--												 class="el-input "-->
+											<!--												 clearable-->
+											<!--												 disabled-->
+											<!--												 end-placeholder="结束时间" format="HH:mm"-->
+											<!--												 is-range-->
+											<!--												 range-separator="至"-->
+											<!--												 start-placeholder="开始时间"-->
+											<!--												 style="margin: 0"-->
+											<!--												 value-format="HH:mm"-->
+											<!--												/>-->
+											<!--											</el-col>-->
+											<el-col :span="4">
+												<div style="text-align: center">小计{{ item.useTime }}(h)</div>
+											</el-col>
+										</el-row>
+										<div class="totalApplyTime" style="margin: 0">共计加班时长{{ formData.totalAddTime }}(h)</div>
+									</el-form-item>
+
+								</el-col>
+								<el-col :span="24">
+									<el-form-item label="备注">
+										<el-input
+										 v-model="formData.remark"
+										 :autosize="{minRows: 4, maxRows: 4}"
+										 :style="{width: '100%'}"
+										 placeholder="请输入备注"
+										 type="textarea"
+										></el-input>
+									</el-form-item>
+								</el-col>
+							</el-form>
+						</el-row>
+
+						<h3>流程历史</h3>
+						<div class="tableDom">
+							<el-table
+							 :data="tableData"
+							 :header-cell-style="{
+                  background:'#1890FF !important',
+                  color:'white'
+                }"
+							 border
+							 style="width: 100%"
+							>
+								<el-table-column fixed label="序号" type="index" width="60"/>
+								<el-table-column
+								 label="节点名称"
+								 prop="nodeName"
+								 width="180"
+								/>
+								<el-table-column
+								 label="处理人"
+								 prop="auditUserName"
+								 width="180"
+								/>
+								<el-table-column
+								 label="审核结果"
+								 prop="auditResultString"
+								/>
+								<el-table-column
+								 label="审核意见"
+								 prop="auditContent"
+								/>
+								<el-table-column
+								 label="发起/审核时间"
+								 prop="createdAt"
+								>
+									<template slot-scope="scope">
+										{{ $common.transTime(scope.row.createdAt) }}
+									</template>
+								</el-table-column>
+							</el-table>
+						</div>
+					</el-card>
+
+				</el-tab-pane>
+				<el-tab-pane label="流程图  " name="second">
+					<add-work-canvas ref="AddWorkCanvas"/>
+				</el-tab-pane>
+			</el-tabs>
+		</div>
+		<div slot="footer">
+			<el-button @click="closeDialog">关闭</el-button>
+		</div>
+	</el-dialog>
+
+</template>
+
+<script>
+import { upload } from '@/static/utils/channel'
+import Base from '@/views/base/base'
+import BaseData from '@/views/base/baseData'
+import UserSelect from '@/views/components/UserSelect'
+import * as echarts from 'echarts'
+import AddWorkCanvas from '@/views/workflow/components/myProcess/addWorkCanvas.vue'
+
+const lineStyle = {
+	color: '#00116a',
+	width: 2
+
+}
+const redLinestyle = {
+	color: 'red',
+	width: 2
+}
+const applyAddWorkTime = { useTime: 0 }
+export default {
+	name: 'ApplyPay',
+	mixins: [Base, BaseData],
+	components: {
+		AddWorkCanvas,
+		upload,
+		UserSelect
+	},
+	data() {
+		return {
+			row: {},
+			argeeBackStatus: false,
+			argeeNoStatus: false,
+			tableData: [],
+			flowHistroy: [],
+			confirmForm: {
+				confirmContent: ''
+			},
+			dc_key: ['ORDER_STATUS', 'PAY_TYPE', 'BUDGET_FY', 'COMMON_PHRASES'],
+			ProjectData: [],
+			dialogVisible: false,
+			applyAddWorkTime: [{ ...applyAddWorkTime }],
+			formData: {
+				proId: '',
+				totalAddTime: 0,
+				applyReasons: '',
+				position: '',
+				applyAddWorkTime: [
+					{
+						useTime: 0
+					}
+				]
+			},
+
+			userinfo: {},
+			activeName: 'first',
+			rules: {
+
+				proId: [{
+					required: true,
+					message: '请选择关联项目',
+					trigger: 'change'
+				}],
+				applyReasons: [{
+					required: true,
+					message: '请输入加班事由',
+					trigger: 'change'
+				}],
+				position: [{
+					required: true,
+					message: '加班位置不能为空',
+					trigger: 'change'
+				}]
+
+			},
+			positionOptions: [
+				{
+					'label': '公司',
+					'value': 1
+				},
+				{
+					'label': '客户处',
+					'value': 2
+				}, {
+					'label': '居家',
+					'value': 3
+				}]
+
+		}
+	},
+	computed: {},
+	watch: {
+		'applyAddWorkTime': {
+			deep: true,
+			handler(newValue, oldValue) {
+				let totalAddTime = 0
+				for (let i = 0; i < this.applyAddWorkTime.length; i++) {
+					if (this.applyAddWorkTime[i].useTime === 0 || this.applyAddWorkTime[i].useTime) {
+						totalAddTime = totalAddTime + Number(this.applyAddWorkTime[i].useTime)
+					}
+				}
+				console.log(totalAddTime)
+				this.changeAddWorkTime(totalAddTime.toFixed(1))
+			}
+		}
+	},
+	created() {
+	},
+	mounted() {
+
+		this.initDict(this.dc_key).then((res) => {
+		})
+		// this.initProject({ /* signstatus: '2,3'*/ })
+
+	},
+	methods: {
+        closeDialog(){
+            this.dialogVisible =false
+            this.$emit('close')
+        },
+		handleClick(tab, event) {
+			if (this.activeName == 'second') this.$refs.AddWorkCanvas.createNodeCanvas(this.row)
+		},
+		async getIMGFlowHistroyByFlowMainId(row) {
+			console.log(row)
+			// return
+			const { data } = await this.baseRequest1('FlowMainController', 'getIMGFlowHistroyByFlowMainId', { flowMainId: row.id })
+			console.log(data)
+			for (let i = 0; i < data.length; i++) {
+				switch (data[i].nodeKey) {
+
+					case 'curr_user':
+						if (i == 0 && data[i].type == 1) {
+							//审核人审核
+							this.node[0].symbol = 'image://' + require('../asste/lanfangkuai.png')
+						}
+
+						break
+					case 'dept_superior_1_0_1':
+						if (i == 0 && data[i].type == 3) {
+							this.node[0].symbol = 'image://' + require('../asste/huangfanmgkuai.png')
+						}
+						if (i == 0 && data[i].type == 1) {
+							this.node[0].symbol = 'image://' + require('../asste/lanfangkuai.png')
+						}
+						break
+					default:
+				}
+			}
+		},
+		createNodeCanvas() {
+			this.$nextTick(() => {
+				let chartDom = document.getElementById('containeraddworkdetail')
+				var myCharts = echarts.init(chartDom)
+				let charts = {
+					nodes: this.node,
+					linesData: this.linesData
+				}
+				let option = {
+					xAxis: {
+						min: 0,
+						max: 600,
+						padding: [0, 50, 0, 50],
+						show: false,
+						type: 'value'
+					},
+					yAxis: {
+						min: 0,
+						max: 450,
+						show: false,
+						type: 'value'
+					},
+					grid: {
+						left: 50,
+						right: 0,
+						bottom: 0,
+						top: 0
+					},
+
+					series: [
+						{
+							type: 'graph',
+							coordinateSystem: 'cartesian2d',
+							symbol: 'rect',
+							symbolSize: [80, 40],
+							itemStyle: {
+								color: 'rgb(225,7,7)'
+							},
+							symbolOffset: [10, 0],
+							// force: {
+							//  edgeLength: 100,//连线的长度
+							//  repulsion: 200 //子节点之间的间距
+							// },
+
+							label: {
+								show: true,
+								color: 'white' // 节点文字颜色
+							},
+
+							data: charts.nodes
+
+						},
+
+						{
+							type: 'lines',
+							polyline: false,
+							coordinateSystem: 'cartesian2d',
+							symbol: ['', 'arrow'],
+							symbolSize: 10,
+							data: charts.linesData
+
+						}
+
+					]
+
+				}
+				myCharts.clear()
+
+				myCharts.setOption(option)
+				window.addEventListener('resize', () => {
+					myCharts.resize()
+				})
+			})
+		},
+		selectCommonPhrases(e) {
+			if (!this.confirmForm.confirmContent) this.confirmForm.confirmContent = ''
+			this.confirmForm.confirmContent += e
+		},
+		changeAddWorkTime(totalAddTime) {
+			this.formData.totalAddTime = totalAddTime
+		},
+		async getUserInfo(applyUser) {
+			let { data: userinfo } = await this.baseRequest1('ApplyAddWorkController', 'getUserInfoByUserId', { userId: applyUser })
+			this.userinfo = userinfo
+			console.log(this.userinfo)
+		},
+		spliceListRow(index) {
+			this.formData.workTimeList.splice(index, 1)
+		},
+		async setVisible(status, row) {
+			this.row = row
+			this.activeName = 'first'
+			this.getUserInfo(row.applyUser)
+			this.confirmForm.flowMainPushId = row.flowMainPushId
+			let { data } = await this.baseRequest1('ApplyAddWorkController', 'getInfoByFlowMainId', { flowMainId: row.id })
+			const { data: flowHistroy } = await this.baseRequest1('FlowMainController', 'getFlowHistroyByFlowMainId', { flowMainId: row.id })
+			this.tableData = flowHistroy
+			this.formData = data
+			this.applyAddWorkTime = data.applyAddWorkTimeList.map((e) => {
+				return {
+					useTime: e.useTime,
+					startDay: this.$common.transDate(e.startDay),
+					startTime: this.$common.transMinute(e.startTime),
+					endTime: this.$common.transMinute(e.endTime)
+				}
+			})
+
+			this.dialogVisible = status
+			this.row = row
+
+		},
+		baseRequest1(prefix, opUrl, postData) {
+			return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+		},
+
+		async handelConfirm() {
+			this.dialogVisible = false
+		}
+	}
+}
+
+</script>
+<style lang="scss">
+#containeraddworkdetail {
+	height: 600px;
+	width: 100%;
+	background: #F5F5F5;
+}
+
+.cclist {
+	.col-input {
+		padding: 0;
+	}
+}
+
+.pdr10px {
+	padding-right: 10px;
+}
+
+.mgb10px {
+	margin-bottom: 10px;
+}
+
+.mb25 {
+	margin-bottom: 25px;
+}
+
+.pdtopbottom16 {
+	padding: 0px 16px;
+}
+
+.pdtop16px {
+	padding-top: 16px;
+}
+
+
+.cost_form {
+	.col-input {
+		font-weight: 400;
+	}
+
+	.el-form-item__label .moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		line-height: 40px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+	}
+
+	.moneydetails {
+		text-align: right;
+		font-size: 16px;
+		font-family: 微软雅黑;
+		padding-right: 10px;
+		word-break: keep-all;
+		white-space: nowrap;
+		color: #606266;
+		text-rendering: optimizeLegibility;
+		font-weight: 400;
+
+
+	}
+
+	.moneydetails:before {
+		content: "*";
+		color: #ff4949;
+
+	}
+}
+
+
+.txtc {
+	text-align: center
+}
+
+.ml5 {
+	margin-left: 5px;
+}
+
+.eltype {
+	margin-bottom: 15px;
+}
+
+.tabsdom {
+	.el-input {
+		width: 100%;
+	}
+
+	.el-tabs__header {
+		text-align: center !important;
+		width: 139px !important;
+		text-align: center !important;
+		display: block !important;
+		margin: auto !important;
+		margin-bottom: 15px !important;
+	}
+
+	.el-tabs__nav-wrap::after {
+		display: none;
+	}
+
+	.el-upload {
+		width: 100%;
+	}
+}
+
+.feeMoneyTotal {
+	width: 100%;
+	height: 14px;
+	font-size: 14px;
+	font-weight: 400;
+	color: #1890FF;
+	margin-top: 31px;
+	margin-bottom: 13px;
+}
+</style>

+ 23 - 4
src/views/workflow/myProcess.vue

@@ -194,7 +194,12 @@
     <apply-add-work ref="applyAddWork" @getData="getData()" />
     <apply-add-work-confirm ref="applyAddWorkConfirm" @getData="getData()" />
     <apply-add-work-detail ref="applyAddWorkDetail" />
-    <apply-again-add-work ref="applyAgainAddWork" @getData="getData()" />
+      <apply-again-add-work ref="applyAgainAddWork" @getData="getData()" />
+
+      <apply-payment ref="applyPayment" @getData="getData()" />
+      <apply-payment-confirm ref="applyPaymentConfirm" @getData="getData()" />
+      <apply-payment-detail ref="applyPaymentDetail" />
+    <apply-again-payment ref="applyAgainPayment" @getData="getData()" />
     <el-dialog
       :close-on-click-modal="false"
       :close-on-press-escape="false"
@@ -216,20 +221,31 @@ import applyPay from '@/views/workflow/components/myProcess/applyPay.vue'
 import changeClient from '@/views/workflow/components/myProcess/changeClient.vue'
 import applyAgainPay from '@/views/workflow/components/myProcess/applyAgainPay.vue'
 import applyAgainHoliday from '@/views/workflow/components/myProcess/applyAgainHoliday.vue'
-import applyAddWork from '@/views/workflow/components/myProcess/applyAddWork.vue'
 import applyAgainAddWork from '@/views/workflow/components/myProcess/applyAgainAddWork.vue'
 import applyHolidayConfirm from '@/views/workflow/components/myProcess/applyHolidayConfirm.vue'
 // import applyCostConfirm from '@/views/workflow/components/myProcess/applyCostConfirm.vue'
 import applyPayConfirm from '@/views/workflow/components/myProcess/applyPayConfirm.vue'
 import applyAddWorkConfirm from '@/views/workflow/components/myProcess/applyAddWorkConfirm.vue'
-import applyPayDetails from '@/views/workflow/components/myProcess/applyPayDetails.vue'
+import applyAddWork from '@/views/workflow/components/myProcess/applyAddWork.vue'
 import applyAddWorkDetail from '@/views/workflow/components/myProcess/applyAddWorkDetail.vue'
+import applyPaymentConfirm from '@/views/workflow/components/myProcess/applyPaymentConfirm.vue'
+import applyPayment from '@/views/workflow/components/myProcess/applyPayment.vue'
+import applyPaymentDetail from '@/views/workflow/components/myProcess/applyPaymentDetail.vue'
+import applyAgainPayment from '@/views/workflow/components/myProcess/applyAgainPayment.vue'
+
+
+import applyPayDetails from '@/views/workflow/components/myProcess/applyPayDetails.vue'
+
 // import applyCostDetails from '@/views/workflow/components/myProcess/applyCostDetails.vue'
 import holidayDetails from '@/views/workflow/components/myProcess/holidayDetails.vue'
 import ApplyPurchase from '@/views/workflow/components/myProcess/applyPurchase.vue'
 
 export default {
     components: {
+        applyPaymentConfirm,
+        applyPayment,
+        applyPaymentDetail,
+        applyAgainPayment,
         ApplyPurchase,
         applyAgainAddWork,
         applyAddWork,
@@ -256,7 +272,7 @@ export default {
                 // { name: '费用报支申请', ref: 'applyCsot' },
                 // { name: '付款申请单', ref: 'applyPay' },
                 { name: '加班申请单', ref: 'applyAddWork' },
-                { name: '付款流程', ref: 'applyAddWork' },
+                { name: '付款流程', ref: 'applyPayment' },
 
                 // { name: '采购申请', ref: 'applyPurchase' }
                 // {name: '付款审核', ref: 'applyPayConfirm'},
@@ -313,6 +329,9 @@ export default {
         },
         handleAudit(row, type) {
             switch (type) {
+                case 'payment' :
+                    this.$refs.applyPaymentConfirm.setVisible(true, row)
+                    break
                 case 'use_money' :
                     // this.$refs.applyCostConfirm.setVisible(true, row)
                     break