浏览代码

隐藏多部门

zt 7 月之前
父节点
当前提交
41eb2b8237

+ 1 - 0
package.json

@@ -34,6 +34,7 @@
         "@ckeditor/ckeditor5-remove-format": "^25.0.0",
         "@ckeditor/ckeditor5-table": "^25.0.0",
         "@ckeditor/ckeditor5-theme-lark": "^25.0.0",
+        "@ckeditor/ckeditor5-vue": "^7.2.0",
         "@ckeditor/ckeditor5-vue2": "^3.0.1",
         "@packy-tang/vue-tinymce": "^1.1.2",
         "axios": "^0.26.1",

+ 35 - 35
src/views/platform/user.vue

@@ -214,41 +214,41 @@
                 </el-col>
               </el-row>
             </el-card>
-            <div v-if="!isAdd" class="space-top space-vertical">
-              <span class="card_title">多部门配置</span>
-              <el-button class="fr" plain size="small" type="primary" @click="addAttrDept"><i class="el-icon-plus" /> 新增部门</el-button>
-            </div>
-            <el-card v-if="!isAdd" class="space-vertical cp" shadow="always">
-              <el-row v-for="(item,index) in form.selectDepts" :key="index" class="col-self">
-                <el-col :span="3" class="col-txt"><span>机构类型</span></el-col>
-                <el-col :span="3" class="col-input">
-                  <el-select v-model="item.attrId" clearable filterable placeholder="组织架构" style="width: 100%" @change="selectAttrChange(item, item.attrId)">
-                    <el-option v-for="attr in item.deptAttrs" :key="attr.value" :label="attr.label" :value="attr.value" />
-                  </el-select>
-                </el-col>
-                <el-col :span="2" class="col-txt"><span>部门</span></el-col>
-                <el-col :span="3" class="col-input">
-                  <el-select v-model="item.deptId" clearable filterable placeholder="组织部门" style="width: 100%;">
-                    <el-option v-for="dept in item.depts" :key="dept.id" :label="dept.deptName" :value="dept.id" />
-                  </el-select>
-                </el-col>
-                <el-col :span="3" class="col-txt"><span>岗位</span></el-col>
-                <el-col :span="4" class="col-input">
-                  <el-select v-model="item.postIds" filterable multiple placeholder="" style="width: 100%;">
-                    <el-option v-for="post in PostData" :key="post.value" :label="post.label" :value="post.value" />
-                  </el-select>
-                </el-col>
-                <el-col :span="1" class="col-txt"><span>职级</span></el-col>
-                <el-col :span="3" class="col-input">
-                  <el-select v-model="item.level" clearable filterable placeholder="职级" style="width: 100%;">
-                    <el-option v-for="level in dc_data.JOB_LEVEL" :key="level.value" :label="level.label" :value="level.value" />
-                  </el-select>
-                </el-col>
-                <el-col :span="1" class="col-input" style="padding-top: 6px">
-                  <el-button circle class="fr" icon="el-icon-close" plain size="mini" type="primary" @click="gridDelete(index)" />
-                </el-col>
-              </el-row>
-            </el-card>
+<!--            <div v-if="!isAdd" class="space-top space-vertical">-->
+<!--              <span class="card_title">多部门配置</span>-->
+<!--              <el-button class="fr" plain size="small" type="primary" @click="addAttrDept"><i class="el-icon-plus" /> 新增部门</el-button>-->
+<!--            </div>-->
+<!--            <el-card v-if="!isAdd" class="space-vertical cp" shadow="always">-->
+<!--              <el-row v-for="(item,index) in form.selectDepts" :key="index" class="col-self">-->
+<!--                <el-col :span="3" class="col-txt"><span>机构类型</span></el-col>-->
+<!--                <el-col :span="3" class="col-input">-->
+<!--                  <el-select v-model="item.attrId" clearable filterable placeholder="组织架构" style="width: 100%" @change="selectAttrChange(item, item.attrId)">-->
+<!--                    <el-option v-for="attr in item.deptAttrs" :key="attr.value" :label="attr.label" :value="attr.value" />-->
+<!--                  </el-select>-->
+<!--                </el-col>-->
+<!--                <el-col :span="2" class="col-txt"><span>部门</span></el-col>-->
+<!--                <el-col :span="3" class="col-input">-->
+<!--                  <el-select v-model="item.deptId" clearable filterable placeholder="组织部门" style="width: 100%;">-->
+<!--                    <el-option v-for="dept in item.depts" :key="dept.id" :label="dept.deptName" :value="dept.id" />-->
+<!--                  </el-select>-->
+<!--                </el-col>-->
+<!--                <el-col :span="3" class="col-txt"><span>岗位</span></el-col>-->
+<!--                <el-col :span="4" class="col-input">-->
+<!--                  <el-select v-model="item.postIds" filterable multiple placeholder="" style="width: 100%;">-->
+<!--                    <el-option v-for="post in PostData" :key="post.value" :label="post.label" :value="post.value" />-->
+<!--                  </el-select>-->
+<!--                </el-col>-->
+<!--                <el-col :span="1" class="col-txt"><span>职级</span></el-col>-->
+<!--                <el-col :span="3" class="col-input">-->
+<!--                  <el-select v-model="item.level" clearable filterable placeholder="职级" style="width: 100%;">-->
+<!--                    <el-option v-for="level in dc_data.JOB_LEVEL" :key="level.value" :label="level.label" :value="level.value" />-->
+<!--                  </el-select>-->
+<!--                </el-col>-->
+<!--                <el-col :span="1" class="col-input" style="padding-top: 6px">-->
+<!--                  <el-button circle class="fr" icon="el-icon-close" plain size="mini" type="primary" @click="gridDelete(index)" />-->
+<!--                </el-col>-->
+<!--              </el-row>-->
+<!--            </el-card>-->
             <span class="card_title">用户信息</span>
             <el-card shadow="always" style="padding: 15px 5px 5px 15px">
               <el-row>

+ 32 - 32
src/views/system/user.vue

@@ -222,38 +222,38 @@
                 </el-col>
               </el-row>
             </el-card>
-            <div v-if="!isAdd" class="space-top space-vertical">
-              <span class="card_title">多部门配置</span>
-              <el-button class="fr" plain size="small" type="primary" @click="addAttrDept"><i class="el-icon-plus" /> 新增部门</el-button>
-            </div>
-            <el-card v-if="!isAdd" class="space-vertical cp" shadow="always">
-              <el-row v-for="(item,index) in form.selectDepts" :key="index" class="col-self">
-                <el-col :span="3" class="col-txt"><span>机构类型</span></el-col>
-                <el-col :span="3" class="col-input">
-                  <el-select v-model="item.attrId" clearable filterable placeholder="组织架构" popper-class="statistic_base" style="width: 100%" @change="selectAttrChange(item, item.attrId)">
-                    <el-option v-for="attr in item.deptAttrs" :key="attr.value" :label="attr.label" :value="attr.value" />
-                  </el-select></el-col>
-                <el-col :span="2" class="col-txt"><span>部门</span></el-col>
-                <el-col :span="3" class="col-input">
-                  <el-select v-model="item.deptId" clearable filterable placeholder="组织部门" popper-class="statistic_base" style="width: 100%;">
-                    <el-option v-for="dept in item.depts" :key="dept.id" :label="dept.deptName" :value="dept.id" />
-                  </el-select></el-col>
-                <el-col :span="3" class="col-txt"><span>岗位</span></el-col>
-                <el-col :span="4" class="col-input">
-                  <el-select v-model="item.postIds" filterable multiple placeholder="" popper-class="statistic_base" style="width: 100%;">
-                    <el-option v-for="post in PostData" :key="post.value" :label="post.label" :value="post.value" />
-                  </el-select>
-                </el-col>
-                <el-col :span="1" class="col-txt"><span>职级</span></el-col>
-                <el-col :span="3" class="col-input">
-                  <el-select v-model="item.level" clearable filterable placeholder="职级" popper-class="statistic_base" style="width: 100%;">
-                    <el-option v-for="level in dc_data.JOB_LEVEL" :key="level.value" :label="level.label" :value="level.value" />
-                  </el-select></el-col>
-                <el-col :span="1" class="col-input" style="padding-top: 6px">
-                  <el-button circle class="fr" icon="el-icon-close" plain size="mini" type="primary" @click="gridDelete(index)" />
-                </el-col>
-              </el-row>
-            </el-card>
+<!--            <div v-if="!isAdd" class="space-top space-vertical">-->
+<!--              <span class="card_title">多部门配置</span>-->
+<!--              <el-button class="fr" plain size="small" type="primary" @click="addAttrDept"><i class="el-icon-plus" /> 新增部门</el-button>-->
+<!--            </div>-->
+<!--            <el-card v-if="!isAdd" class="space-vertical cp" shadow="always">-->
+<!--              <el-row v-for="(item,index) in form.selectDepts" :key="index" class="col-self">-->
+<!--                <el-col :span="3" class="col-txt"><span>机构类型</span></el-col>-->
+<!--                <el-col :span="3" class="col-input">-->
+<!--                  <el-select v-model="item.attrId" clearable filterable placeholder="组织架构" popper-class="statistic_base" style="width: 100%" @change="selectAttrChange(item, item.attrId)">-->
+<!--                    <el-option v-for="attr in item.deptAttrs" :key="attr.value" :label="attr.label" :value="attr.value" />-->
+<!--                  </el-select></el-col>-->
+<!--                <el-col :span="2" class="col-txt"><span>部门</span></el-col>-->
+<!--                <el-col :span="3" class="col-input">-->
+<!--                  <el-select v-model="item.deptId" clearable filterable placeholder="组织部门" popper-class="statistic_base" style="width: 100%;">-->
+<!--                    <el-option v-for="dept in item.depts" :key="dept.id" :label="dept.deptName" :value="dept.id" />-->
+<!--                  </el-select></el-col>-->
+<!--                <el-col :span="3" class="col-txt"><span>岗位</span></el-col>-->
+<!--                <el-col :span="4" class="col-input">-->
+<!--                  <el-select v-model="item.postIds" filterable multiple placeholder="" popper-class="statistic_base" style="width: 100%;">-->
+<!--                    <el-option v-for="post in PostData" :key="post.value" :label="post.label" :value="post.value" />-->
+<!--                  </el-select>-->
+<!--                </el-col>-->
+<!--                <el-col :span="1" class="col-txt"><span>职级</span></el-col>-->
+<!--                <el-col :span="3" class="col-input">-->
+<!--                  <el-select v-model="item.level" clearable filterable placeholder="职级" popper-class="statistic_base" style="width: 100%;">-->
+<!--                    <el-option v-for="level in dc_data.JOB_LEVEL" :key="level.value" :label="level.label" :value="level.value" />-->
+<!--                  </el-select></el-col>-->
+<!--                <el-col :span="1" class="col-input" style="padding-top: 6px">-->
+<!--                  <el-button circle class="fr" icon="el-icon-close" plain size="mini" type="primary" @click="gridDelete(index)" />-->
+<!--                </el-col>-->
+<!--              </el-row>-->
+<!--            </el-card>-->
             <span class="card_title">用户信息</span>
             <el-card shadow="always" style="padding: 15px 5px 5px 15px">
               <el-row>

文件差异内容过多而无法显示
+ 644 - 693
src/views/workflow/components/myProcess/applyPayment.vue


+ 466 - 416
src/views/workflow/components/myProcess/applyPaymentConfirm.vue

@@ -1,243 +1,246 @@
 <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>
+  <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-row type="flex" justify="end">
+            <el-col :span="3" class="col-txt"><span>流程编号:</span></el-col>
+            <el-col :span="6" class="col-input"><span style="font-size: 14px">{{ userinfo.flowNum }}</span></el-col>
+          </el-row>
+          <el-form
+            ref="elForm"
+            :model="formData"
+            :rules="rules"
+            label-width="150px"
+          >
+
+            <el-card shadow="always" style="padding: 15px 5px 5px 15px">
+              <el-row :gutter="15">
+                <el-col :span="24">
+                  <el-form-item label="标题" prop="title">
+                    <el-input v-model="formData.title" placeholder="付款领用单-年月日" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="创建人">
+                    <el-input v-model="userinfo.truename" placeholder="创建人" readonly />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="创建部门">
+                    <el-input v-model="userinfo.deptName" placeholder="创建部门" readonly />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="是否为无合同付款">
+                    <el-select
+                      v-model="formData.isNoContract"
+                      clearable
+                      filterable
+                      placeholder="是否为无合同付款"
+                      style="width: 100%"
+                      :popper-append-to-body="false"
+                      popper-class="statistic_base"
+                    >
+                      <el-option
+                        v-for="item in dc_data.ANSWER_NEED"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                        :popper-append-to-body="false"
+                        popper-class="statistic_base"
+                      />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="付款单位">
+                    <el-input v-model="formData.payerName" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="收款单位">
+                    <el-input v-model="formData.payeeName" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="资金用途">
+                    <el-input v-model="formData.moneyPurpose" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="合同总价">
+                    <el-input v-model="formData.contractPrice" oninput="value=value.replace(/[^\d.]/g,'')" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="24">
+                  <el-form-item label="付款说明">
+                    <el-input
+                      v-model="formData.payRemark"
+                      :autosize="{minRows: 4, maxRows: 4}"
+                      :style="{width: '100%'}"
+                      placeholder="请填写"
+                      type="textarea"
+                      maxlength="2000"
+                      show-word-limit
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="累计付款">
+                    <el-input v-model="formData.havePayMoney" oninput="value=value.replace(/[^\d.]/g,'')" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="申请金额(小写)" prop="applyPayMoney">
+                    <el-input v-model="formData.applyPayMoney" oninput="value=value.replace(/[^\d.]/g,'')" placeholder="请填写" @change="swapper(formData.applyPayMoney)" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="申请金额(大写)" prop="applyPayMoneyUppercase">
+                    <el-input v-model="formData.applyPayMoneyUppercase" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <!--                  <el-col :span="24">formData.applyPayMoneyUppercase={{formData.applyPayMoneyUppercase}}</el-col>-->
+
+                <el-col :span="24">
+                  <el-form-item label="相关附件">
+                    <el-upload
+                      :disabled="true"
+                      :action="$constant.BASE_URI+'/FileController/upload'"
+                      :file-list="formData.fileUrlList"
+                      :http-request="uploadFile"
+                      class="upload-demo"
+                      multiple
+                    >
+                      <el-button size="small" type="primary">上传附件</el-button>
+                      <div slot="file" slot-scope="{file}">
+                        <a :href="file.url">{{ file.name }}</a>
+                        <span class="el-upload-list__item-actions">
+                          <i class="el-icon-delete" @click="handlePictureRemove(file,formData.fileUrlList)" />
+                        </span>
+                      </div>
+                    </el-upload>
+
+                  </el-form-item>
+                </el-col>
+              </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" prop="confirmResult">
+                        <el-radio-group v-model="confirmForm.confirmResult">
+                          <el-radio :label="1">同意</el-radio>
+                          <el-radio  :label="2">退回发起人</el-radio>
+                          <el-radio  :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-form>
+
+        </el-tab-pane>
+        <el-tab-pane label="流程图  " name="second">
+          <payment-canvas ref="PaymentCanvas" />
+        </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>
 
@@ -246,183 +249,233 @@ 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'
+import PaymentCanvas from '@/views/workflow/components/myProcess/paymentCanvas.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')
-				}
-			})
-		}
-	}
+    name: 'ApplyPay',
+    components: {
+        upload,
+        UserSelect,
+        PaymentCanvas
+    },
+    mixins: [Base, BaseData],
+    data() {
+        return {
+            row: {},
+            confirmList: [],
+            selectList: [],
+
+            argeeBackStatus: false,
+            argeeNoStatus: false,
+            tableData: [],
+            flowHistroy: [],
+            confirmForm: {
+                confirmContent: '',
+                confirmResult: 1
+            },
+            dc_key: ['ANSWER_NEED'],
+            ProjectData: [],
+            dialogVisible: false,
+            applyAddWorkTime: [{ ...applyAddWorkTime }],
+            formData: {
+                proId: '',
+                totalAddTime: 0,
+                applyReasons: '',
+                position: '',
+                applyAddWorkTime: [
+                    {
+                        useTime: 0
+                    }
+                ]
+            },
+
+            userinfo: {},
+            activeName: 'first',
+            rules: {
+                confirmResult: [{
+                    required: true,
+                    message: '请选择处理意见',
+                    trigger: 'change'
+                }],
+                title: [{
+                    required: true,
+                    message: '请输入标题',
+                    trigger: 'change'
+                }],
+                applyPayMoney: [{
+                    required: true,
+                    message: '请输入申请金额(小写)',
+                    trigger: 'change'
+                }
+                ],
+                applyPayMoneyUppercase: [{
+                    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: {
+        handlePictureRemove(file, fileUrlList) {
+            var index = fileUrlList.indexOf(file)
+            fileUrlList.splice(index, 1)
+        },
+        uploadFile: function(param) {
+            const _this = this
+            upload(param, true).then((res) => {
+                _this.formData.fileUrlList.push(res)
+            })
+        },
+        swapper(n) {
+            // console.log('ddd',n)
+            if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) { return '数据非法' }
+            var unit = '千百拾亿千百拾万千百拾元角分'; var str = ''
+            n += '00'
+            var p = n.indexOf('.')
+            if (p >= 0) { n = n.substring(0, p) + n.substr(p + 1, 2) }
+            unit = unit.substr(unit.length - n.length)
+            for (var i = 0; i < n.length; i++) { str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i) }
+            // console.log('end',str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整'))
+            this.formData.applyPayMoneyUppercase = str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整')
+
+            // console.log('end',this.formData.applyPayMoneyUppercase)
+            this.$forceUpdate()
+        },
+        handleClick(tab, event) {
+            this.canVasStatus = false
+            if (this.activeName == 'second') {
+                this.canVasStatus = true
+                this.$nextTick(() => {
+                    this.$refs.PaymentCanvas.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) {
+            const { data: userinfo } = await this.baseRequest1('ApplyPaymentSettleController', '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
+            const { data } = await this.baseRequest1('ApplyPaymentSettleController', '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
+            if (this.formData.isNoContract || this.formData.isNoContract == 0) {
+                this.formData.isNoContract = String(this.formData.isNoContract)
+            }
+            if (data.fileDataIds) {
+                const { data: fileTaoTaoList } = await this.baseRequest1('FileZtController', 'findFileInfoByIds/' + data.fileDataIds, '')
+                console.log(fileTaoTaoList.data)
+                this.formData.fileUrlList = fileTaoTaoList.data.map((e) => {
+                    return {
+                        url: this.$constant.BASE_URI + '/FileController/download/' + e.id,
+                        name: e.fileName,
+                        data: e.id,
+                        uid: new Date().getTime()
+                    }
+                })
+                console.log(this.formData.fileUrlList)
+            } else {
+                this.formData.fileUrlList = []
+            }
+            if (!this.confirmForm.confirmResult) {
+                this.confirmForm.confirmResult = '1'
+            }
+            // 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('ApplyPaymentSettleController', 'AddConfirmResult', { ...this.confirmForm })
+                if (data.code == 200) {
+                    this.$message.success('处理成功')
+                    this.form = {}
+                    this.confirmForm = { confirmContent: '' }
+                    this.dialogVisible = false
+                    this.$emit('getData')
+                }
+            })
+        }
+    }
 }
 
 </script>
@@ -453,7 +506,6 @@ export default {
 	padding-top: 16px;
 }
 
-
 .cost_form {
 	.col-input {
 		font-weight: 400;
@@ -483,7 +535,6 @@ export default {
 		text-rendering: optimizeLegibility;
 		font-weight: 400;
 
-
 	}
 
 	.moneydetails:before {
@@ -493,7 +544,6 @@ export default {
 	}
 }
 
-
 .txtc {
 	text-align: center
 }

+ 480 - 452
src/views/workflow/components/myProcess/applyPaymentDetail.vue

@@ -1,202 +1,195 @@
 <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>
+  <!--    加班申请单-详情改造 发起付款申请(要调用接口的)-->
+  <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-row type="flex" justify="end">
+            <el-col :span="3" class="col-txt"><span>流程编号:</span></el-col>
+            <el-col :span="6" class="col-input"><span style="font-size: 14px">{{ userinfo.flowNum }}</span></el-col>
+          </el-row>
+          <el-form
+            ref="elForm"
+            :model="formData"
+            :rules="rules"
+            label-width="150px"
+          >
+
+            <el-card shadow="always" style="padding: 15px 5px 5px 15px">
+              <el-row :gutter="15">
+                <el-col :span="24">
+                  <el-form-item label="标题" prop="title">
+                    <el-input v-model="formData.title" placeholder="付款领用单-年月日" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="创建人">
+                    <el-input v-model="userinfo.truename" placeholder="创建人" readonly />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="创建部门">
+                    <el-input v-model="userinfo.deptName" placeholder="创建部门" readonly />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="是否为无合同付款">
+                    <el-select
+                      v-model="formData.isNoContract"
+                      clearable
+                      filterable
+                      placeholder="是否为无合同付款"
+                      style="width: 100%"
+                      :popper-append-to-body="false"
+                      popper-class="statistic_base"
+                    >
+                      <el-option
+                        v-for="item in dc_data.ANSWER_NEED"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                        :popper-append-to-body="false"
+                        popper-class="statistic_base"
+                      />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="付款单位">
+                    <el-input v-model="formData.payerName" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="收款单位">
+                    <el-input v-model="formData.payeeName" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="资金用途">
+                    <el-input v-model="formData.moneyPurpose" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="合同总价">
+                    <el-input v-model="formData.contractPrice" oninput="value=value.replace(/[^\d.]/g,'')" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="24">
+                  <el-form-item label="付款说明">
+                    <el-input
+                      v-model="formData.payRemark"
+                      :autosize="{minRows: 4, maxRows: 4}"
+                      :style="{width: '100%'}"
+                      placeholder="请填写"
+                      type="textarea"
+                      maxlength="2000"
+                      show-word-limit
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="累计付款">
+                    <el-input v-model="formData.havePayMoney" oninput="value=value.replace(/[^\d.]/g,'')" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="申请金额(小写)" prop="applyPayMoney">
+                    <el-input v-model="formData.applyPayMoney" oninput="value=value.replace(/[^\d.]/g,'')" placeholder="请填写" @change="swapper(formData.applyPayMoney)" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="申请金额(大写)" prop="applyPayMoneyUppercase">
+                    <el-input v-model="formData.applyPayMoneyUppercase" placeholder="请填写" />
+                  </el-form-item>
+                </el-col>
+                <!--                  <el-col :span="24">formData.applyPayMoneyUppercase={{formData.applyPayMoneyUppercase}}</el-col>-->
+
+                <el-col :span="24">
+                  <el-form-item label="相关附件">
+                    <el-upload
+                        :disabled="true"
+                      :action="$constant.BASE_URI+'/FileController/upload'"
+                      :file-list="formData.fileUrlList"
+                      :http-request="uploadFile"
+                      class="upload-demo"
+                      multiple
+                    >
+                      <el-button size="small" type="primary">上传附件</el-button>
+                      <div slot="file" slot-scope="{file}">
+                        <a :href="file.url">{{ file.name }}</a>
+                        <span class="el-upload-list__item-actions">
+                          <i class="el-icon-delete" @click="handlePictureRemove(file,formData.fileUrlList)" />
+                        </span>
+                      </div>
+                    </el-upload>
+
+                  </el-form-item>
+                </el-col>
+              </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-form>
+
+        </el-tab-pane>
+        <el-tab-pane label="流程图  " name="second">
+          <payment-canvas ref="PaymentCanvas" />
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+    <div slot="footer">
+      <el-button @click="closeDialog">关闭</el-button>
+    </div>
+  </el-dialog>
 
 </template>
 
@@ -206,267 +199,305 @@ 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'
+import PaymentCanvas from '@/views/workflow/components/myProcess/paymentCanvas.vue'
 
 const lineStyle = {
-	color: '#00116a',
-	width: 2
+    color: '#00116a',
+    width: 2
 
 }
 const redLinestyle = {
-	color: 'red',
-	width: 2
+    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
+    name: 'ApplyPay',
+    components: {
+        PaymentCanvas,
+        upload,
+        UserSelect
+    },
+    mixins: [Base, BaseData],
+    data() {
+        return {
+            row: {},
+            argeeBackStatus: false,
+            argeeNoStatus: false,
+            tableData: [],
+            flowHistroy: [],
+            confirmForm: {
+                confirmContent: ''
+            },
+            dc_key: ['ANSWER_NEED'],
+            ProjectData: [],
+            dialogVisible: false,
+            applyAddWorkTime: [{ ...applyAddWorkTime }],
+            formData: {
+                proId: '',
+                totalAddTime: 0,
+                applyReasons: '',
+                position: '',
+                applyAddWorkTime: [
+                    {
+                        useTime: 0
+                    }
+                ]
+            },
+
+            userinfo: {},
+            activeName: 'first',
+            rules: {
+                title: [{
+                    required: true,
+                    message: '请输入标题',
+                    trigger: 'change'
+                }],
+                applyPayMoney: [{
+                    required: true,
+                    message: '请输入申请金额(小写)',
+                    trigger: 'change'
+                }
+                ],
+                applyPayMoneyUppercase: [{
+                    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: {
+        handlePictureRemove(file, fileUrlList) {
+            var index = fileUrlList.indexOf(file)
+            fileUrlList.splice(index, 1)
+        },
+        uploadFile: function(param) {
+            const _this = this
+            upload(param, true).then((res) => {
+                _this.formData.fileUrlList.push(res)
+            })
+        },
+        swapper(n) {
+            // console.log('ddd',n)
+            if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) { return '数据非法' }
+            var unit = '千百拾亿千百拾万千百拾元角分'; var str = ''
+            n += '00'
+            var p = n.indexOf('.')
+            if (p >= 0) { n = n.substring(0, p) + n.substr(p + 1, 2) }
+            unit = unit.substr(unit.length - n.length)
+            for (var i = 0; i < n.length; i++) { str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i) }
+            // console.log('end',str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整'))
+            this.formData.applyPayMoneyUppercase = str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整')
+
+            // console.log('end',this.formData.applyPayMoneyUppercase)
+            this.$forceUpdate()
+        },
+        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
-		}
-	}
+        handleClick(tab, event) {
+            if (this.activeName == 'second') this.$refs.PaymentCanvas.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(() => {
+                const chartDom = document.getElementById('containeraddworkdetail')
+                var myCharts = echarts.init(chartDom)
+                const charts = {
+                    nodes: this.node,
+                    linesData: this.linesData
+                }
+                const 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) {
+            const { data: userinfo } = await this.baseRequest1('ApplyPaymentSettleController', '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
+            const { data } = await this.baseRequest1('ApplyPaymentSettleController', 'getInfoByFlowMainId', { flowMainId: row.id })
+            const { data: flowHistroy } = await this.baseRequest1('FlowMainController', 'getFlowHistroyByFlowMainId', { flowMainId: row.id })
+            this.tableData = flowHistroy
+            this.formData = data
+            if (this.formData.isNoContract || this.formData.isNoContract == 0) {
+                this.formData.isNoContract = String(this.formData.isNoContract)
+            }
+            if (data.fileDataIds) {
+                const { data: fileTaoTaoList } = await this.baseRequest1('FileZtController', 'findFileInfoByIds/' + data.fileDataIds, '')
+                console.log(fileTaoTaoList.data)
+                this.formData.fileUrlList = fileTaoTaoList.data.map((e) => {
+                    return {
+                        url: this.$constant.BASE_URI + '/FileController/download/' + e.id,
+                        name: e.fileName,
+                        data: e.id,
+                        uid: new Date().getTime()
+                    }
+                })
+                console.log(this.formData.fileUrlList)
+            } else {
+                this.formData.fileUrlList = []
+            }
+            // 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>
@@ -503,7 +534,6 @@ export default {
 	padding-top: 16px;
 }
 
-
 .cost_form {
 	.col-input {
 		font-weight: 400;
@@ -533,7 +563,6 @@ export default {
 		text-rendering: optimizeLegibility;
 		font-weight: 400;
 
-
 	}
 
 	.moneydetails:before {
@@ -543,7 +572,6 @@ export default {
 	}
 }
 
-
 .txtc {
 	text-align: center
 }

+ 62 - 63
src/views/workflow/components/myProcess/changeClient.vue

@@ -1,11 +1,12 @@
 <template>
   <el-dialog
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      :title="dialogTitle"
-      :visible.sync="dialogVisible"
-      top="50px"
-      width="50%"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    :title="dialogTitle"
+    :visible.sync="dialogVisible"
+    top="50px"
+    width="50%"
+    :append-to-body="true"
   >
     <div class="tabsdom">
       <el-form ref="form" :model="form" :rules="1" style="width: 100%;padding: 5px">
@@ -16,10 +17,10 @@
               <el-col :span="2" class="col-txt">新委托人</el-col>
               <el-col :span="22">
                 <user-select
-                    :default-select="selectList"
-                    :multiple="false"
-                    width="700"
-                    @selectValue="parentMethod"
+                  :default-select="selectList"
+                  :multiple="false"
+                  width="700"
+                  @selectValue="parentMethod"
                 />
               </el-col>
             </el-row>
@@ -41,63 +42,61 @@
 import UserSelect from '@/views/components/UserSelect'
 import Base from '@/views/base/base.vue'
 import BaseData from '@/views/base/baseData.vue'
-import {upload} from '@/static/utils/channel'
+import { upload } from '@/static/utils/channel'
 
 export default {
-  name: 'ApplyPay',
-  components: {
-    UserSelect
-  },
-  mixins: [Base, BaseData],
-  data() {
-    return {
-      dialogVisible: false,
-      form: {},
-      fileError: false,
-      fileList: [],
-      selectList: [],
-      value1: [],
-      ProjectData: [
-        {name: '年假(剩余x天)', type: 'year'},
-        {name: '事假(剩余x小时)', type: 'affair'},
-        {name: '病假', type: 'illness'}
-      ],
-      dialogTitle: '请假申请',
-    }
-  },
-  methods: {
-    uploadFile(param) {
-      upload(param, true).then((res) => {
-        this.form.fileUrlList.push(res)
-      })
-    },
-    parentMethod: function (val) {
-      if (val.length > 0) {
-        console.log(val)
-        this.form.pushEntrustId = val.join(',')
-      }
-    },
-    async setVisible(status, row) {
-
-      this.form.flowMainPushId = row.flowMainPushId
-      this.dialogVisible = status
+    name: 'ApplyPay',
+    components: {
+        UserSelect
     },
-    async confirmSubmit() {
-
-      if (!this.form.pushEntrustId || this.form.pushEntrustId.length == 0) return this.$message.warning("请选择新的委托人")
-      const {data: data} = await this.baseRequest1('FlowMainController', 'entrustOperate', {...this.form})
-      if (data.code == 200) {
-        this.$message.success('委托人变更成功')
-        this.dialogVisible = false
-        this.$emit("getData")
-      } else {
-        this.$message.warning(data.msg)
-      }
-    },
-    baseRequest1(prefix, opUrl, postData) {
-      return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+    mixins: [Base, BaseData],
+    data() {
+        return {
+            dialogVisible: false,
+            form: {},
+            fileError: false,
+            fileList: [],
+            selectList: [],
+            value1: [],
+            ProjectData: [
+                { name: '年假(剩余x天)', type: 'year' },
+                { name: '事假(剩余x小时)', type: 'affair' },
+                { name: '病假', type: 'illness' }
+            ],
+            dialogTitle: '请假申请'
+        }
     },
-  }
+    methods: {
+        uploadFile(param) {
+            upload(param, true).then((res) => {
+                this.form.fileUrlList.push(res)
+            })
+        },
+        parentMethod: function(val) {
+            if (val.length > 0) {
+                console.log(val)
+                this.form.pushEntrustId = val.join(',')
+            }
+        },
+        async setVisible(status, row) {
+            this.form.flowMainPushId = row.flowMainPushId
+            this.dialogVisible = status
+        },
+        async confirmSubmit() {
+            if (!this.form.pushEntrustId || this.form.pushEntrustId.length == 0) return this.$message.warning('请选择新的委托人')
+            const { data: data } = await this.baseRequest1('FlowMainController', 'entrustOperate', { ...this.form })
+            if (data.code == 200) {
+                this.$message.success('委托人变更成功')
+                this.dialogVisible = false
+                this.$emit('getData')
+            } else {
+                this.$message.warning(data.msg)
+            }
+        },
+        baseRequest1(prefix, opUrl, postData) {
+            return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+        }
+    }
 }
 </script>
 

+ 535 - 0
src/views/workflow/components/myProcess/paymentCanvas.vue

@@ -0,0 +1,535 @@
+<template>
+  <div>
+    <div class="node_info">
+      <div>节点说明:</div>
+      <div v-for="item in nodeColor" class="dis_flex">
+        <div class="node_class" :style="{backgroundColor: item.nodeback}" />
+        {{ item.name }}
+
+      </div>
+    </div>
+    <div v-show="true" id="containeraddworkdetail" style="width: 100%" />
+
+  </div>
+</template>
+
+<script>
+import * as echarts from 'echarts'
+
+const lineStyle = {
+    color: '#999999',
+    width: 2,
+    type: 'dotted'
+}
+const redLinestyle = {
+    color: 'red',
+    width: 2
+}
+const node = [ // 节点
+    {
+        nodeKey: 'curr_user',
+        name: '申请人发起',
+        value: [45, 100],
+        symbol: 'image://' + require('../asste/huifangkuai.png'),
+        symbolSize: [110, 60]
+    },
+    {
+        nodeKey: 'dept_superior_1_0_1',
+        name: '直接上级审核',
+        value: [125, 100],
+        symbol: 'image://' + require('../asste/huifangkuai.png'),
+        symbolSize: [110, 60]
+    },
+    {
+        nodeKey: 'dept_head_1_0_1',
+        name: '部门负责人审核',
+        value: [205, 100],
+        symbol: 'image://' + require('../asste/huifangkuai.png'),
+        symbolSize: [110, 60]
+    },
+    {
+        nodeKey: 'flow_fgld_1_0_1',
+        name: '分管领导审核',
+        value: [285, 100],
+        symbol: 'image://' + require('../asste/huifangkuai.png'),
+        symbolSize: [110, 60]
+    },
+    {
+        name: '上级分管领导\n审核',
+        nodeKey: 'flow_sjfgld_1_0_1',
+        value: [365, 100],
+        symbol: 'image://' + require('../asste/huifangkuai.png'),
+        symbolSize: [110, 60]
+    },
+    {
+        nodeKey: 'flow_zyld_1_0_1',
+        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]
+    }
+]
+const linesData = [ // 连线
+    {
+        nodeKey: 'curr_user',
+        lineStyle: lineStyle,
+        coords: [[45, 100], [105, 100]]
+    },
+    {
+        nodeKey: 'dept_superior_1_0_1',
+        lineStyle: lineStyle,
+        coords: [[125, 100], [185, 100]]
+    },
+    {
+        nodeKey: 'dept_head_1_0_1',
+        lineStyle: lineStyle,
+        coords: [[205, 100], [265, 100]]
+    },
+    {
+        nodeKey: 'flow_fgld_1_0_1',
+
+        lineStyle: lineStyle,
+        coords: [[285, 100], [345, 100]]
+    },
+    {
+        nodeKey: 'flow_sjfgld_1_0_1',
+
+        lineStyle: lineStyle,
+        coords: [[365, 100], [425, 100]]
+    },
+    {
+
+        nodeKey: 'flow_zyld_1_0_1',
+
+        lineStyle: lineStyle,
+        coords: [[445, 100], [505, 100]]
+    },
+    {
+        nodeKey: 'flow_zyld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[450, 100], [450, 400]],
+        symbol: 'none'
+    },
+    {
+
+        nodeKey: 'flow_sjfgld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[370, 100], [370, 350]],
+        symbol: 'none'
+    },
+    {
+        nodeKey: 'flow_fgld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[290, 100], [290, 300]],
+        symbol: 'none'
+    },
+    {
+
+        nodeKey: 'dept_head_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[210, 100], [210, 250]],
+        symbol: 'none'
+    },
+    {
+
+        nodeKey: 'dept_superior_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[130, 100], [130, 200]],
+        symbol: 'none'
+    },
+    // {
+    // 	lineStyle: redLinestyle,
+    // 	coords: [[50, 100], [50, 400]],
+    // 	symbol: 'none'
+    // },
+    {
+        nodeKey: 'flow_zyld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[50, 100], [50, 400]],
+        symbol: 'none'
+    },
+    {
+        nodeKey: 'flow_sjfgld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[50, 100], [50, 350]],
+        symbol: 'none'
+    },
+    {
+        nodeKey: 'flow_fgld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[50, 100], [50, 300]],
+        symbol: 'none'
+    },
+    {
+        nodeKey: 'dept_head_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[50, 100], [50, 250]],
+        symbol: 'none'
+    },
+    {
+        nodeKey: 'dept_superior_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[50, 100], [50, 200]],
+        symbol: 'none'
+    },
+
+    {
+        lineStyle: lineStyle,
+        nodeKey: 'flow_zyld_1_0_1_back',
+        coords: [[450, 400], [50, 400]],
+        symbol: 'none'
+    },
+    {
+        nodeKey: 'flow_sjfgld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[370, 350], [50, 350]],
+        symbol: 'none'
+    },
+    {
+
+        nodeKey: 'flow_fgld_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[290, 300], [50, 300]],
+        symbol: 'none'
+    },
+    {
+
+        nodeKey: 'dept_head_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[210, 250], [50, 250]],
+        symbol: 'none'
+    },
+    {
+
+        nodeKey: 'dept_superior_1_0_1_back',
+        lineStyle: lineStyle,
+        coords: [[130, 200], [50, 200]],
+        symbol: 'none'
+    },
+    {
+        lineStyle: lineStyle,
+        coords: [[50, 150], [50, 150]],
+        symbol: 'none'
+    }
+
+]
+export default {
+    name: 'AddWorkCanvas',
+    data() {
+        return {
+            linesData: [],
+            node: [],
+            nodeColor: [
+                { name: '审核通过', nodeback: '#2A3980' },
+                { name: '未经过', nodeback: '#999999' },
+                { name: '退回', nodeback: '#E04242' },
+                { name: '审核中', nodeback: '#E08E42' },
+                { name: '撤回', nodeback: '#4294E0' }
+            ]
+        }
+    },
+    mounted() {
+
+    },
+    methods: {
+
+        baseRequest1(prefix, opUrl, postData) {
+            return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
+        },
+        async createNodeCanvas(row) {
+            this.linesData = JSON.parse(JSON.stringify(linesData))
+            this.node = JSON.parse(JSON.stringify(node))
+            const { data } = await this.baseRequest1('FlowMainController', 'getIMGFlowHistroyByFlowMainId', { flowMainId: row.id })
+            console.log(data)
+            for (let i = 0; i < data.length; i++) {
+                const index = this.node.findIndex((e) => e.nodeKey == data[i].nodeKey)
+                switch (data[i].nodeKey) {
+                    case 'curr_user':
+                        if (data[i].type == 1) {
+                            this.getImgUrl(index, data[i].type)
+                            this.getLineStyle(data[i].nodeKey)
+                        }
+                        break
+                    case 'dept_superior_1_0_1':
+                        if (data[i].type == 1 || data[i].type == 3) {
+                            this.getImgUrl(index, data[i].type)
+                        }
+                        if (data[i].type == 1) {
+                            this.getLineStyle(data[i].nodeKey)
+                        }
+                        if (data[i].type == 2) {
+                            this.getLineStyle('dept_superior_1_0_1_back')
+                            this.getImgUrl(index, data[i].type)
+                        }
+                        break
+                    case 'dept_head_1_0_1':
+                        if (data[i].type == 1 || data[i].type == 3) {
+                            this.getImgUrl(index, data[i].type)
+                        }
+                        if (data[i].type == 1) {
+                            this.getLineStyle(data[i].nodeKey)
+                        }
+                        if (data[i].type == 2) {
+                            this.getLineStyle('dept_head_1_0_1_back')
+                            this.getImgUrl(index, data[i].type)
+                        }
+                        if (data[i].isPass == '1') {
+                            this.getLineStyle('only_tiaoxiujia1')
+                            const index2 = this.node.findIndex((e) => e.nodeKey == 'isPass')
+                            console.log(this.node, index2)
+                            this.node[index2].symbol = 'image://' + require('../asste/lanfangkuai.png')
+                        }
+                        break
+                    case 'only_tiaoxiujia':
+                        if (data[i].type == 1 || data[i].type == 3) {
+                            this.node[index].symbol = 'image://' + require('../asste/lanselingxin.jpg')
+                            this.getLineStyle(data[i].nodeKey)
+                        }
+
+                    case 'flow_fgld_1_0_1':
+                        this.getImgUrl(index, data[i].type)
+
+                        if (data[i].type == 1) {
+                            this.getLineStyle('flow_fgld_1_0_1')
+                        }
+                        if (data[i].type == 2) {
+                            this.getLineStyle('flow_fgld_1_0_1_back')
+                        }
+                        break
+
+                    case 'flow_sjfgld_1_0_1':
+
+                        this.getLineStyle(data[i].nodeKey)
+                        this.getImgUrl(index, data[i].type)
+                        if (data[i].type == 2) {
+                            this.getLineStyle('flow_sjfgld_1_0_1_back')
+
+                            // this.node[index].symbol = 'image://' + require('../asste/lanselingxin.jpg')
+                        }
+                        break
+                    case 'flow_zyld_1_0_1':
+                        this.getLineStyle('less_3day1')
+
+                        if (data[i].type == 1) {
+                            this.getLineStyle('flow_sjfgld_1_0_1')
+                            this.getLineStyle(data[i].nodeKey)
+                            this.getImgUrl(index, data[i].type)
+                            this.getLineStyle('less_3day3')
+                            const endIndex = this.node.findIndex((e) => e.name == '结束')
+                            this.getImgUrl(endIndex, '1')
+                        }
+
+                        if (data[i].type == 2) {
+                            this.getLineStyle('flow_zyld_1_0_1_back')
+                            // this.node[index].symbol = 'image://' + require('../asste/lanselingxin.jpg')
+                        }
+                        break
+				 //
+                    default:
+                }
+            }
+            this.getNode()
+        },
+        reductionLineStyle(nodeKey) {
+            for (let i = 0; i < this.linesData.length; i++) {
+                if (this.linesData[i].nodeKey == nodeKey) {
+                    this.linesData[i].lineStyle = lineStyle
+                }
+            }
+        },
+        getLineStyle(nodeKey) {
+            for (let i = 0; i < this.linesData.length; i++) {
+                if (this.linesData[i].nodeKey == nodeKey) {
+                    this.linesData[i].lineStyle = {
+                        color: '#2A3980',
+                        width: 2
+                    }
+                }
+            }
+        },
+        getImgUrl(index, type) {
+            if (index == -1) return
+            switch (type) {
+                case '1':
+                    console.log(index)
+                    console.log(this.node[index])
+                    this.node[index].symbol = 'image://' + require('../asste/lanfangkuai.png')
+                    break
+                case '2':
+                    this.node[index].symbol = 'image://' + require('../asste/hongfangkuai.jpg')
+                    break
+                case '3':
+                    this.node[index].symbol = 'image://' + require('../asste/huangfanmgkuai.png')
+                    break
+                case '4' || '5':
+                    this.node[index].symbol = 'image://' + require('../asste/qianlanfangkuai.jpg')
+                    break
+                default:
+            }
+        },
+        getNode() {
+            this.$nextTick(() => {
+                const chartDom = document.getElementById('containeraddworkdetail')
+                let myCharts = null
+                myCharts = echarts.init(chartDom)
+                const charts = {
+                    nodes: this.node,
+                    linesData: this.linesData
+                }
+                const 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()
+                })
+            })
+        }
+    }
+}
+</script>
+
+<style scoped>
+
+</style>

文件差异内容过多而无法显示
+ 0 - 1087
src/views/workflow/components/myProcess/xxxapplyCost.vue


+ 5 - 2
src/views/workflow/myProcess.vue

@@ -184,7 +184,7 @@
 <!--    <apply-pay-confirm ref="applyPayConfirm" @getData="getData()" />-->
 <!--    <apply-cost-confirm ref="applyCostConfirm" @getData="getData()" />-->
 <!--    <apply-holiday-confirm ref="applyHolidayConfirm" @getData="getData()" />-->
-<!--    <change-client ref="changeClient" @getData="getData" />-->
+    <change-client ref="changeClient" @getData="getData" />
 <!--    <apply-again-cost ref="applyAgainCost" @getData="getData" />-->
 <!--    <apply-pay-details ref="applyPayDetails" @getData="getData" />-->
 <!--    <apply-again-pay ref="applyAgainPay" @getData="getData" />-->
@@ -271,7 +271,7 @@ export default {
                 // { name: '请假申请单', ref: 'applyHoliday' },
                 // { name: '费用报支申请', ref: 'applyCsot' },
                 // { name: '付款申请单', ref: 'applyPay' },
-                { name: '加班申请单', ref: 'applyAddWork' },
+                // { name: '加班申请单', ref: 'applyAddWork' },
                 { name: '付款流程', ref: 'applyPayment' },
 
                 // { name: '采购申请', ref: 'applyPurchase' }
@@ -355,6 +355,9 @@ export default {
         },
         openDetailsDialog(type, row) {
             switch (type) {
+                case 'payment' :
+                    this.$refs.applyPaymentDetail.setVisible(true, row)
+                    break
                 case 'use_money' :
                     this.$refs.applyCostDetails.setVisible(true, row)
                     break