applyLxSjWork.vue 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382
  1. <template>
  2. <!-- 发起付款申请 -->
  3. <el-dialog
  4. :close-on-click-modal="false"
  5. :close-on-press-escape="false"
  6. :title="dialogTitle"
  7. append-to-body
  8. :visible.sync="dialogLxVisible"
  9. top="50px"
  10. width="75%"
  11. :before-close="beforeClose"
  12. >
  13. <div class="tabsdom">
  14. <el-tabs v-model="activeName" @tab-click="handleClick">
  15. <el-tab-pane label="立项申请" name="first">
  16. <el-card shadow="always" style="padding: 15px 5px 5px 15px">
  17. <el-form
  18. ref="elformData"
  19. :model="formData"
  20. :rules="rules"
  21. class="payform"
  22. label-width="200px"
  23. size="medium"
  24. >
  25. <h3 style="margin-top: 0"><span style="color: red">*</span> 基本信息</h3>
  26. <el-card style="padding:0px 20px;margin-bottom: 25px">
  27. <el-row>
  28. <el-col :span="12">
  29. <el-form-item label="关联项目" prop="proId">
  30. <el-select v-model="formData.proId" filterable placeholder="关联项目名称" @change="proChange">
  31. <el-option
  32. v-for="item in ProjectData"
  33. :key="item.value"
  34. :label="item.label"
  35. :value="item.value"
  36. >
  37. <span style="float: left">{{ item.label }}</span>
  38. <span style="float: right; color: #8492a6; font-size: 13px">{{
  39. item.custname
  40. }}</span>
  41. </el-option>
  42. </el-select>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="12">
  46. <el-form-item label="项目类型">
  47. <div style="line-height: 40px;height: 40px">{{ formData.protype }}</div>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="储备项目状态">
  52. <div style="line-height: 40px;height: 40px">{{ formData.signStatus }}</div>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="预计销售金额(元)">
  57. <div style="line-height: 40px;height: 40px">{{ formData.presales ? formData.presales + '(元)' : '' }}</div>
  58. </el-form-item>
  59. </el-col>
  60. </el-row>
  61. </el-card>
  62. <h3 style="margin-top: 0"><span style="color: red">*</span> 立项内容</h3>
  63. <el-card style="padding:0px 20px;margin-bottom: 25px">
  64. <el-row :gutter="15">
  65. <el-col :span="24">
  66. <el-form-item label="*项目概述" label-width="160px">
  67. <el-input type="textarea" v-model="formData.approval.proOverview" :rows="3"/>
  68. </el-form-item>
  69. </el-col>
  70. <el-col :span="12">
  71. <el-form-item label="*是否实现盈利" label-width="160px">
  72. <el-select v-model="formData.approval.isProfit" filterable clearable placeholder="是否实现盈利" >
  73. <el-option v-for="item in billTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
  74. </el-select>
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="12">
  78. <el-form-item label="*税率" label-width="160px">
  79. <el-input v-model="formData.approval.rate" />
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="24">
  83. <el-form-item label="*项目实施计划" label-width="160px">
  84. <el-input v-model="formData.approval.implementationContent" type="textarea" :raws="2"/>
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="24">
  88. <el-form-item label="*项目工作实施方案" label-width="160px" prop="proId">
  89. <el-upload
  90. class="upload-demo"
  91. :action="$constant.BASE_URI + '/FileController/upload'"
  92. :http-request="upload"
  93. :before-remove="beforeRemove"
  94. :file-list="fileUrlList"
  95. >
  96. <el-button v-if="!isView" size="small" type="primary">点击上传</el-button>
  97. <div v-if="!isView" slot="tip" class="el-upload__tip">请上传50MB以内的文件</div>
  98. <div slot="file" slot-scope="{file}">
  99. <a :href="file.url">{{ file.name }}</a>
  100. <span class="el-upload-list__item-actions">
  101. <i v-if="!isView" class="el-icon-delete" @click="handlePictureRemove(file,fileUrlList)" />
  102. </span>
  103. </div>
  104. </el-upload>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="24">
  108. <el-form-item label="*调研报告" label-width="160px" prop="proId">
  109. <el-upload
  110. class="upload-demo"
  111. :action="$constant.BASE_URI + '/FileController/upload'"
  112. :http-request="upload2"
  113. :before-remove="beforeRemove"
  114. :file-list="fileUrlList2"
  115. >
  116. <el-button v-if="!isView" size="small" type="primary">点击上传</el-button>
  117. <div v-if="!isView" slot="tip" class="el-upload__tip">请上传50MB以内的文件</div>
  118. <div slot="file" slot-scope="{file}">
  119. <a :href="file.url">{{ file.name }}</a>
  120. <span class="el-upload-list__item-actions">
  121. <i v-if="!isView" class="el-icon-delete" @click="handlePictureRemove(file,fileUrlList2)" />
  122. </span>
  123. </div>
  124. </el-upload>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="24">
  128. <el-form-item label="其他附件" label-width="160px" prop="proId">
  129. <el-upload
  130. class="upload-demo"
  131. :action="$constant.BASE_URI + '/FileController/upload'"
  132. :http-request="upload3"
  133. :before-remove="beforeRemove"
  134. :file-list="fileUrlList3"
  135. >
  136. <el-button v-if="!isView" size="small" type="primary">点击上传</el-button>
  137. <div v-if="!isView" slot="tip" class="el-upload__tip">请上传50MB以内的文件</div>
  138. <div slot="file" slot-scope="{file}">
  139. <a :href="file.url">{{ file.name }}</a>
  140. <span class="el-upload-list__item-actions">
  141. <i v-if="!isView" class="el-icon-delete" @click="handlePictureRemove(file,fileUrlList3)" />
  142. </span>
  143. </div>
  144. </el-upload>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="24">
  148. <span class="card_title">*回款计划</span>
  149. <el-card shadow="always">
  150. <el-row>
  151. <el-col :span="24">
  152. <el-table
  153. v-loading="planLoading"
  154. :data="SalsReturnPlanData"
  155. stripe
  156. row-class-name="g_table_row"
  157. >
  158. <el-table-column type="index" width="60" />
  159. <el-table-column label="应收日期" prop="ardateStr" />
  160. <el-table-column label="提醒日期" prop="noticedateStr" />
  161. <el-table-column label="应收金额(元)" prop="aramountStr" header-align="center" align="center" />
  162. <el-table-column label="已收金额(元)" prop="rcamountStr" header-align="center" align="center" />
  163. <el-table-column label="收款名称" prop="arname" header-align="center" align="center" />
  164. <el-table-column label="收款状态" prop="statusStr" header-align="center" align="center" />
  165. <el-table-column align="right" width="160">
  166. <template slot="header">
  167. <el-button
  168. size="mini"
  169. class="ch-button-warning"
  170. @click="addPlan(ctrId)"
  171. >添加回款计划</el-button>
  172. </template>
  173. <template scope="scope">
  174. <el-button
  175. size="mini"
  176. type="danger"
  177. @click="deletePlan(scope.row.index) "
  178. >删除</el-button>
  179. </template>
  180. </el-table-column>
  181. </el-table>
  182. </el-col>
  183. </el-row>
  184. </el-card>
  185. </el-col>
  186. </el-row>
  187. </el-card>
  188. <h3 style="margin-top: 0"><span style="color: red">*</span> 预算信息</h3>
  189. <el-card style="padding:0px 20px;margin-bottom: 25px">
  190. <el-row :gutter="15">
  191. <el-col :span="24">
  192. <bug-get ref="bids" :key="keys" :pro-id="formData.proId" :is-audit="isView?'true':''" @handleInfo="handleChange" />
  193. </el-col>
  194. </el-row>
  195. </el-card>
  196. <h3 style="margin-top: 0">
  197. 申请内容
  198. </h3>
  199. <el-card style="padding:0px 20px;margin-bottom: 25px">
  200. <el-row :gutter="15">
  201. <el-col :span="24">
  202. <el-form-item label="申请理由" label-width="160px" prop="reason">
  203. <el-input
  204. v-model="formData.reason"
  205. :style="{width: '100%'}"
  206. clearable
  207. placeholder="请输入申请理由"
  208. />
  209. </el-form-item>
  210. </el-col>
  211. <el-col :span="24">
  212. <el-form-item label="备注说明" label-width="160px" prop="comment">
  213. <el-input
  214. v-model="formData.comment"
  215. :style="{width: '100%'}"
  216. clearable
  217. />
  218. </el-form-item>
  219. </el-col>
  220. </el-row>
  221. </el-card>
  222. </el-form>
  223. </el-card>
  224. </el-tab-pane>
  225. <el-tab-pane label="流程图 " name="second">
  226. <div style="width: 100%">
  227. <el-row>
  228. <el-col :span="24">
  229. <div class="node_info">
  230. <div>节点说明:</div>
  231. <div class="dis_flex" v-for="item in nodeColor">
  232. <div class="node_class" :style="{backgroundColor: item.nodeback}"></div>
  233. {{ item.name }}
  234. </div>
  235. </div>
  236. <div id="containerPay" style="width: 100%" v-show="true"></div>
  237. </el-col>
  238. </el-row>
  239. </div>
  240. </el-tab-pane>
  241. </el-tabs>
  242. </div>
  243. <div slot="footer">
  244. <el-button @click="setVisible(false,'')">取 消</el-button>
  245. <el-button :loading="buttonLoading" type="primary" @click="confirmSubmit()">确 定</el-button>
  246. </div>
  247. <el-dialog :title="dialogPlanTitle" :visible.sync="dialogPlanVisible" width="70%" top="50px" :close-on-click-modal="false" :close-on-press-escape="false" append-to-body @open="dlgPlanCRUDOpen">
  248. <el-form ref="planForm" :model="planForm" style="width: 100%;padding: 5px" :rules="planRules">
  249. <el-row>
  250. <el-col style="padding-bottom: 10px">
  251. <span class="card_title">基本信息</span>
  252. <el-card shadow="always" style="padding: 15px 5px 5px 15px">
  253. <el-row>
  254. <el-col :span="24">
  255. <el-row>
  256. <el-col :span="3" class="col-txt"><span>应收日期</span></el-col>
  257. <el-col :span="8" class="col-input">
  258. <el-form-item prop="ardate">
  259. <el-date-picker
  260. v-model="planForm.ardate"
  261. style="width: 100%"
  262. type="date"
  263. placeholder="应收日期"
  264. @change="arDateChange"
  265. />
  266. </el-form-item>
  267. </el-col>
  268. <el-col :span="4" class="col-txt"><span>提醒日期</span></el-col>
  269. <el-col :span="8" class="col-input">
  270. <el-form-item prop="noticedate">
  271. <el-date-picker
  272. v-model="planForm.noticedate"
  273. style="width: 100%"
  274. type="date"
  275. placeholder="提醒日期"
  276. />
  277. </el-form-item>
  278. </el-col>
  279. </el-row>
  280. <el-row>
  281. <el-col :span="3" class="col-txt"><span>应收金额</span></el-col>
  282. <el-col :span="8" class="col-input">
  283. <el-form-item prop="aramount">
  284. <el-input v-model="planForm.aramount" placeholder="0" type="number">
  285. <template slot="prepend">¥</template>
  286. </el-input>
  287. </el-form-item>
  288. </el-col>
  289. <el-col :span="4" class="col-txt"><span>收款名称</span></el-col>
  290. <el-col :span="8" class="col-input">
  291. <el-form-item prop="arname">
  292. <el-input v-model="planForm.arname" />
  293. </el-form-item>
  294. </el-col>
  295. </el-row>
  296. </el-col>
  297. </el-row>
  298. </el-card>
  299. </el-col>
  300. </el-row>
  301. <el-row>
  302. <el-col style="padding-bottom: 10px">
  303. <span class="card_title">其他信息</span>
  304. <el-card shadow="always" style="padding: 15px 5px 5px 15px">
  305. <el-row>
  306. <el-col :span="3" class="col-txt"><span>更新日期</span></el-col>
  307. <el-col :span="8" class="col-input">
  308. <el-form-item>
  309. <el-input v-model="planForm.updatedatStr" disabled />
  310. </el-form-item>
  311. </el-col>
  312. <el-col :span="3" class="col-txt"><span>更新人</span></el-col>
  313. <el-col :span="9" class="col-input">
  314. <el-form-item>
  315. <el-input v-model="planForm.updatedname" disabled />
  316. </el-form-item>
  317. </el-col>
  318. </el-row>
  319. </el-card>
  320. </el-col>
  321. </el-row>
  322. </el-form>
  323. <div slot="footer">
  324. <el-button @click="dialogPlanVisible = false">取 消</el-button>
  325. <el-button v-preventReClick type="primary" @click.native="confirmPlanSubmit()">确 定</el-button>
  326. </div>
  327. </el-dialog>
  328. </el-dialog>
  329. </template>
  330. <script>
  331. import { upload } from '@/static/utils/channel'
  332. import Base from '@/views/base/base'
  333. import BaseData from '@/views/base/baseData'
  334. import UserSelect from '@/views/components/UserSelect'
  335. import * as echarts from 'echarts'
  336. import Constant from '@/static/utils/constant'
  337. import BugGet from '@/views/workflow/components/myProcess/applyBudgetingApprove.vue'
  338. const lineStyle = {
  339. color: '#00116a',
  340. width: 2
  341. }
  342. const redLinestyle = {
  343. color: 'red',
  344. width: 2
  345. }
  346. const intiData = {}
  347. export default {
  348. name: 'ApplyPay',
  349. components: {
  350. UserSelect,
  351. BugGet
  352. },
  353. mixins: [Base, BaseData],
  354. data() {
  355. return {
  356. ProjectData: [],
  357. SalsReturnPlanData:[],
  358. formData: this.initForm(),
  359. dc_sign_status: Constant.dc_sign_status_2,
  360. hasRecord: false,
  361. planLoading: false,
  362. ysInfo:true,
  363. keys: 0,
  364. ctrId:'',
  365. fileUrlList:[],
  366. fileUrlList2:[],
  367. fileUrlList3:[],
  368. planForm: {
  369. id: '',
  370. planno: '',
  371. ctrid: '',
  372. ardate: '',
  373. aramount: '',
  374. arname: '',
  375. noticedate: '',
  376. updatedby: '',
  377. updatedname: '',
  378. updatedatStr: ''
  379. },
  380. planRules:{},
  381. isAdd:false,
  382. isView: false,
  383. dialogPlanVisible:false,
  384. dialogPlanTitle:'新增计划',
  385. hasNewTemplate:false,
  386. referenceId: '',
  387. fileError: false,
  388. bizByList: [],
  389. selectList: [],
  390. detailsForm: {},
  391. buttonLoading: false,
  392. // 查询的时候用的字典========================================
  393. dc_key: ['PAY_TYPE', 'BUDGET_CB', 'RECEIPT_TYPE'],
  394. fileDataIdsAction: 'https://jsonplaceholder.typicode.com/posts/',
  395. billTypeOptions: [
  396. { 'label': '是', 'value': '是' },
  397. { 'label': '否', 'value': '否'}
  398. ],
  399. nodeColor: [
  400. { name: '审核通过', nodeback: '#2A3980' },
  401. { name: '未经过', nodeback: '#999999' },
  402. { name: '退回', nodeback: '#E04242' },
  403. { name: '审核中', nodeback: '#E08E42' },
  404. { name: '撤回', nodeback: '#4294E0' }
  405. ],
  406. onlineForm: {},
  407. dialogTitle: '立项申请',
  408. dialogLxVisible: false,
  409. form: {},
  410. activeName: 'first',
  411. OutOrderList: [],
  412. rules: {
  413. fileDataIds: [{ required: false, message: '请上传发票文件', trigger: 'change' }],
  414. totalPayMoney: [{ required: true, message: '请输入订单累计已支付金额', trigger: 'change' }],
  415. payName: [{ required: true, message: '请输入付款名称', trigger: 'change' }],
  416. payMoney: [{ required: true, message: '请输入付款金额', trigger: 'change' }]
  417. // costsType: [{required: true, message: '请选择', trigger: 'change'}],
  418. }
  419. }
  420. },
  421. mounted() {
  422. this.initProType()
  423. this.generateDcMap()
  424. this.initDict(this.dc_key).then((res) => {
  425. // this.initProject({ signstatus: '2,3,6',realValidStatus:'0,3' })
  426. this.initPro()
  427. })
  428. // /webServer/BugLibraryController/listBizUserAll
  429. },
  430. methods: {
  431. generateDcMap: function() {
  432. this.dc_map['dc_sign_status'] = this.$common.transDcMap(Constant.dc_sign_status_2)
  433. },
  434. upload(param){
  435. this.uploadRp(param,'fileUrlList')
  436. },
  437. upload2(param){
  438. this.uploadRp(param,'fileUrlList2')
  439. },
  440. upload3(param){
  441. this.uploadRp(param,'fileUrlList3')
  442. },
  443. uploadRp: function(param,fileName) {
  444. const _this = this
  445. _this.fileError = true
  446. upload(param, true).then((res) => {
  447. if (res.key === 200) {
  448. if('fileUrlList'===fileName){
  449. _this.fileUrlList.push(res)
  450. }else if('fileUrlList2'===fileName){
  451. _this.fileUrlList2.push(res)
  452. }else if('fileUrlList3'===fileName){
  453. _this.fileUrlList3.push(res)
  454. }
  455. this.$message.info('文件上传成功')
  456. } else {
  457. this.$message.error('文件上传失败')
  458. }
  459. _this.fileError = false
  460. })
  461. },
  462. initPro(){
  463. const _this = this
  464. this.proMainRequest('listAllByUserRole',{ signstatus: '2,3,6',realValidStatus:'0,3' }).then(res=>{
  465. if(res.data){
  466. res.data.forEach(function(item) {
  467. const json = {
  468. label: item.proname,
  469. value: item.id,
  470. protype: item.protype,
  471. prostatus: item.prostatus,
  472. signstatus: item.signstatus,
  473. realValidStatus: item.realValidStatus,
  474. custname: item.custname,
  475. closingItemStatus: item.closingItemStatus,
  476. createdAt: item.createdat,
  477. validstatus: item.validstatus,
  478. managedby: item.managedby,
  479. presales: item.presales
  480. }
  481. _this.ProjectData.push(json)
  482. _this.ProjectMap[json.value] = json
  483. })
  484. }
  485. })
  486. },
  487. initForm(){
  488. return{
  489. id:'',
  490. proId:'',
  491. ctrId:'',
  492. approvalId:'',
  493. workReceivableId:'',
  494. reason:'',
  495. comment:'',
  496. status:'',
  497. approvalForm:'',
  498. approval:{},
  499. workReceivableForm:''
  500. }
  501. },
  502. ctrMainByProId(proId){
  503. const _this = this
  504. this.ctrMainRequest('getByProId',{proId:proId}).then(res=>{
  505. if(res.data){
  506. _this.ctrId = res.data.id
  507. _this.getPlanData(res.data.id)
  508. }
  509. })
  510. },
  511. getPlanData: function(ctrId) {
  512. const _this = this
  513. this.SalsReturnPlanData = []
  514. if (ctrId) {
  515. this.planLoading = true
  516. const postData = this.$qs.stringify({
  517. ctrid: ctrId,
  518. pageNum: this.currentPage,
  519. pageSize: this.pageSize
  520. })
  521. console.log(postData)
  522. this.$axios({
  523. headers: {
  524. 'MVVM-Key': String(new Date().getTime()),
  525. 'xx': 'anything'
  526. },
  527. method: 'post',
  528. url: _this.$constant.BASE_URI + '/AccountReceivableController/list',
  529. data: postData
  530. }).then((res) => {
  531. console.log('sales return plan list', res)
  532. _this.$common.checkLoginStatus(res.data.statusCode)
  533. if (res.data.rows) {
  534. res.data.rows.forEach(function(item) {
  535. const json = {
  536. planstatus: item.planstatus,
  537. arname: item.arname,
  538. // aramountStr: '¥' + _this.$common.formatMoney(item.aramount),
  539. // rcamountStr: '¥' + _this.$common.formatMoney(item.receiveamount),
  540. ardateStr: _this.$common.transDate(item.ardate),
  541. noticedateStr: _this.$common.transDate(item.noticedate),
  542. id: item.id
  543. }
  544. const ra = _this.$common.formatMoney(item.receiveamount)
  545. json.rcamountStr = ra ? '¥' + ra : ''
  546. item.ysAmount = parseInt(item.aramount || 0)
  547. const sr = _this.$common.formatMoney(item.ysAmount)
  548. json.ysAmountStr = sr ? '¥' + sr : ''
  549. item.aramount = parseInt(item.aramount || 0) + parseInt(item.adjustamount || 0)
  550. const r = _this.$common.formatMoney(item.aramount)
  551. json.aramountStr = r ? '¥' + r : ''
  552. json.statusStr = '未收款'
  553. if (item.planstatus === '1') {
  554. json.statusStr = '收款中'
  555. } else if (item.planstatus === '2') {
  556. json.statusStr = '收款完成'
  557. }
  558. _this.SalsReturnPlanData.push(json)
  559. })
  560. }
  561. _this.planLoading = false
  562. }).catch((err, x) => {
  563. console.log('sales return plan list error', err, x)
  564. })
  565. }
  566. },
  567. arDateChange: function(val) {
  568. // console.log('contract date change:' + val)
  569. if (!val) return
  570. const time = new Date(val)
  571. time.setTime(time.getTime() - 3600 * 1000 * 24 * 15)
  572. this.planForm.noticedate = time
  573. },
  574. confirmPlanSubmit: function() {
  575. const _this = this
  576. this.$refs.planForm.validate(valid => {
  577. if (valid) {
  578. var acting = this.$notify({
  579. title: '正在上传信息,喝杯咖啡等等',
  580. type: 'warning'
  581. })
  582. const postData = {
  583. id: this.planForm.id,
  584. ctrid: this.ctrId,
  585. ardate: this.$common.transDate(this.planForm.ardate, Constant.DATE_PATTERN.DATE_TIME_h),
  586. aramount: this.planForm.aramount,
  587. arname: this.planForm.arname,
  588. noticedate: this.$common.transDate(this.planForm.noticedate, Constant.DATE_PATTERN.DATE_TIME_h),
  589. updatedby: this.planForm.updatedby,
  590. updatedat: this.$common.transDate(new Date(), Constant.DATE_PATTERN.DATE_TIME_h)
  591. }
  592. postData.ardateStr= postData.ardate.split(' ')[0]
  593. postData.noticedateStr= postData.noticedate.split(' ')[0]
  594. const r = _this.$common.formatMoney(postData.aramount)
  595. postData.aramountStr = r ? '¥' + r : ''
  596. postData.planno = this.planForm.planno
  597. postData.planstatus = '0'
  598. postData.groupId = this.$common.currUser() ? this.$common.currUser().groupId : ''
  599. postData.statusStr = '未收款'
  600. _this.SalsReturnPlanData.push(postData)
  601. _this.dialogPlanVisible = false
  602. _this.$notify({
  603. title: '添加成功',
  604. type: 'info'
  605. })
  606. } else {
  607. console.log('error submit!!')
  608. return false
  609. }
  610. })
  611. },
  612. /* 删除*/
  613. deletePlan: function(pId,index) {
  614. this.SalsReturnPlanData.splice(index,1)
  615. },
  616. /* 新增*/
  617. addPlan: function(ctrId) {
  618. this.planForm = {
  619. id: '',
  620. planno: 'PLN-' + new Date().Format('yyyyMMddhhmm'),
  621. ctrid: ctrId,
  622. ardate: '',
  623. aramount: '',
  624. arname: '',
  625. noticedate: '',
  626. updatedby: '',
  627. updatedname: '',
  628. updatedatStr: ''
  629. }
  630. const currUser = this.$common.currUser()
  631. if (currUser) {
  632. this.planForm.updatedatStr = this.$common.transDate(new Date().getTime())
  633. this.planForm.updatedname = currUser.truename
  634. this.planForm.updatedby = currUser.id
  635. }
  636. this.isAdd = true
  637. this.dialogPlanVisible = true
  638. this.dialogPlanTitle = '新增计划'
  639. },
  640. getBudgetData() {
  641. const _this = this
  642. this.budGetingRequest('checkRecordApproval', { proId:this.formData.proId }).then(res => {
  643. if (res.data.hasRecord) {
  644. _this.hasRecord = true
  645. if (res.data.templateId) {
  646. const postData = {
  647. proId: _this.formData.proId,
  648. templateId: res.data.templateId
  649. }
  650. _this.budGetingRequest('checkNewTemplate', postData).then(res => {
  651. _this.hasNewTemplate = !res.data;
  652. _this.keys++
  653. _this.$nextTick(() => {
  654. this.$refs.bids.initData(_this.hasNewTemplate)
  655. })
  656. })
  657. }else {
  658. _this.keys++
  659. _this.$nextTick(() => {
  660. this.$refs.bids.initData(_this.hasNewTemplate)
  661. })
  662. }
  663. }else{
  664. _this.keys++
  665. _this.$nextTick(() => {
  666. this.$refs.bids.initData(_this.hasNewTemplate)
  667. })
  668. }
  669. })
  670. },
  671. proChange(){
  672. const _this = this
  673. _this.ProjectData.forEach(item=>{
  674. if(item.value===_this.formData.proId){
  675. _this.formData.protype = _this.ProTypeMap[item.protype]
  676. _this.formData.signStatus = _this.dc_map.dc_sign_status[item.signstatus]
  677. _this.formData.presales = item.presales
  678. _this.formData.proName = item.label
  679. }
  680. })
  681. _this.getBudgetData()
  682. _this.ctrMainByProId(_this.formData.proId)
  683. },
  684. beforeClose() {
  685. // this.formData = {
  686. // fileUrlList: []
  687. // }
  688. this.dialogLxVisible = false
  689. },
  690. handleClick(tab, event) {
  691. if (this.activeName == 'second') this.createNodeCanvas()
  692. },
  693. createNodeCanvas() {
  694. this.$nextTick(() => {
  695. let chartDom = document.getElementById('containerPay')
  696. var myCharts = echarts.init(chartDom)
  697. let charts = {
  698. nodes: [ // 节点
  699. {
  700. name: '申请人发起',
  701. value: [45, 100],
  702. symbol: 'image://' + require('../asste/huifangkuai.png'),
  703. symbolSize: [110, 60]
  704. },
  705. {
  706. name: '直接上级审核',
  707. value: [125, 100],
  708. symbol: 'image://' + require('../asste/huifangkuai.png'),
  709. symbolSize: [110, 60]
  710. },
  711. {
  712. name: '部门负责人审核',
  713. value: [205, 100],
  714. symbol: 'image://' + require('../asste/huifangkuai.png'),
  715. symbolSize: [110, 60]
  716. },
  717. {
  718. name: '财务负责人',
  719. value: [285, 100],
  720. symbol: 'image://' + require('../asste/huifangkuai.png'),
  721. symbolSize: [110, 60]
  722. },
  723. {
  724. name: '分管领导审核',
  725. value: [365, 100],
  726. symbol: 'image://' + require('../asste/huifangkuai.png'),
  727. symbolSize: [110, 60]
  728. },
  729. {
  730. name: '上级分管领导\n审核',
  731. value: [445, 100],
  732. symbol: 'image://' + require('../asste/huifangkuai.png'),
  733. symbolSize: [110, 60]
  734. },
  735. {
  736. name: '总经理(董事长)\n审核',
  737. value: [605, 100],
  738. symbol: 'image://' + require('../asste/huifangkuai.png'),
  739. symbolSize: [110, 60]
  740. },
  741. {
  742. name: '结束',
  743. value: [685, 100],
  744. symbol: 'image://' + require('../asste/huifangkuai.png'),
  745. symbolSize: [110, 60]
  746. },
  747. {
  748. label: {
  749. show: true,
  750. color: 'red', // 节点文字颜色
  751. backgroundColor: '#f5f5f5'
  752. },
  753. itemStyle: {
  754. color: '#f5f5f5'
  755. },
  756. name: ' 退回发起人 ',
  757. value: [450, 500],
  758. symbolSize: [70, 20]
  759. },
  760. // {
  761. // label: {
  762. // show: true,
  763. // color: 'red', // 节点文字颜色
  764. // backgroundColor: '#f5f5f5'
  765. // },
  766. // itemStyle: {
  767. // color: '#f5f5f5'
  768. // },
  769. // name: '退回发起人 ',
  770. // value: [400, 450],
  771. // symbolSize: [70, 20]
  772. // },
  773. {
  774. label: {
  775. show: true,
  776. color: 'red', // 节点文字颜色
  777. backgroundColor: '#f5f5f5'
  778. },
  779. itemStyle: {
  780. color: '#f5f5f5'
  781. },
  782. name: '退回发起人 ',
  783. value: [350, 400],
  784. symbolSize: [70, 20]
  785. },
  786. {
  787. label: {
  788. show: true,
  789. color: 'red', // 节点文字颜色
  790. backgroundColor: '#f5f5f5'
  791. },
  792. itemStyle: {
  793. color: '#f5f5f5'
  794. },
  795. name: ' 退回发起人 ',
  796. value: [300, 350],
  797. symbolSize: [20, 20]
  798. },
  799. {
  800. label: {
  801. show: true,
  802. color: 'red', // 节点文字颜色
  803. backgroundColor: '#f5f5f5'
  804. },
  805. itemStyle: {
  806. color: '#f5f5f5'
  807. },
  808. name: ' 退回发起人 ',
  809. value: [250, 300],
  810. symbolSize: [20, 20]
  811. },
  812. {
  813. label: {
  814. show: true,
  815. color: 'red', // 节点文字颜色
  816. backgroundColor: '#f5f5f5'
  817. },
  818. itemStyle: {
  819. color: '#f5f5f5'
  820. },
  821. name: ' 退回发起人 ',
  822. value: [250, 300],
  823. symbolSize: [20, 20]
  824. },
  825. {
  826. label: {
  827. show: true,
  828. color: 'red', // 节点文字颜色
  829. backgroundColor: '#f5f5f5'
  830. },
  831. itemStyle: {
  832. color: '#f5f5f5'
  833. },
  834. name: ' 退回发起人 ',
  835. value: [175, 250],
  836. symbolSize: [20, 20]
  837. },
  838. {
  839. label: {
  840. show: true,
  841. color: 'red', // 节点文字颜色
  842. backgroundColor: '#f5f5f5'
  843. },
  844. itemStyle: {
  845. color: 'rgb(0,0,0,0)'
  846. },
  847. name: ' 项目金额<200万 ',
  848. value: [525, 40],
  849. symbolSize: [20, 20]
  850. },
  851. {
  852. label: {
  853. show: true,
  854. color: 'red', // 节点文字颜色
  855. backgroundColor: '#f5f5f5'
  856. },
  857. itemStyle: {
  858. color: 'rgb(0,0,0,0)'
  859. },
  860. name: ' 项目金额≥200万 ',
  861. value: [525, 100],
  862. symbolSize: [110, 60]
  863. },
  864. {
  865. label: {
  866. show: true,
  867. color: 'red', // 节点文字颜色
  868. backgroundColor: '#f5f5f5'
  869. },
  870. itemStyle: {
  871. color: '#f5f5f5'
  872. },
  873. name: ' 退回发起人 ',
  874. value: [100, 200],
  875. symbolSize: [20, 20]
  876. }
  877. ],
  878. linesData: [ // 连线
  879. {
  880. lineStyle: lineStyle,
  881. coords: [[45, 100], [100, 100]]
  882. },
  883. {
  884. lineStyle: lineStyle,
  885. coords: [[125, 100], [180, 100]]
  886. },
  887. {
  888. lineStyle: lineStyle,
  889. coords: [[205, 100], [260, 100]]
  890. },
  891. {
  892. lineStyle: lineStyle,
  893. coords: [[285, 100], [340, 100]]
  894. },
  895. {
  896. lineStyle: lineStyle,
  897. coords: [[365, 100], [420, 100]]
  898. },
  899. {
  900. lineStyle: lineStyle,
  901. coords: [[445, 100], [580, 100]]
  902. },
  903. {
  904. lineStyle: lineStyle,
  905. coords: [[600, 100], [660, 100]]
  906. },
  907. {
  908. lineStyle: lineStyle,
  909. coords: [[610, 100], [610, 500]],
  910. symbol: 'none'
  911. },
  912. {
  913. lineStyle: lineStyle,
  914. coords: [[450, 70], [450, 40]],
  915. symbol: 'none'
  916. },
  917. {
  918. lineStyle: lineStyle,
  919. coords: [[450, 40], [685, 40]],
  920. symbol: 'none'
  921. },
  922. {
  923. lineStyle: lineStyle,
  924. coords: [[685, 40], [685, 70]]
  925. },
  926. {
  927. lineStyle: lineStyle,
  928. coords: [[450, 100], [450, 400]],
  929. symbol: 'none'
  930. },
  931. {
  932. lineStyle: lineStyle,
  933. coords: [[370, 100], [370, 350]],
  934. symbol: 'none'
  935. },
  936. {
  937. lineStyle: lineStyle,
  938. coords: [[290, 100], [290, 300]],
  939. symbol: 'none'
  940. },
  941. {
  942. lineStyle: lineStyle,
  943. coords: [[210, 100], [210, 250]],
  944. symbol: 'none'
  945. },
  946. {
  947. lineStyle: lineStyle,
  948. coords: [[130, 100], [130, 200]],
  949. symbol: 'none'
  950. },
  951. // {
  952. // lineStyle: lineStyle,
  953. // coords: [[50, 500],[50, 130]]
  954. // },
  955. {
  956. lineStyle: lineStyle,
  957. coords: [[610, 500], [50, 500]],
  958. symbol: 'none'
  959. },
  960. {
  961. lineStyle: lineStyle,
  962. coords: [[50, 500],[50, 130]]
  963. },
  964. // {
  965. // lineStyle: lineStyle,
  966. // coords: [[530, 450], [50, 450]],
  967. // symbol: 'none'
  968. // },
  969. {
  970. lineStyle: lineStyle,
  971. coords: [[450, 400], [50, 400]],
  972. symbol: 'none'
  973. },
  974. {
  975. lineStyle: lineStyle,
  976. coords: [[50, 400],[50, 130]]
  977. },
  978. {
  979. lineStyle: lineStyle,
  980. coords: [[370, 350], [50, 350]],
  981. symbol: 'none'
  982. },
  983. {
  984. lineStyle: lineStyle,
  985. coords: [[50, 350],[50, 130]]
  986. },
  987. {
  988. lineStyle: lineStyle,
  989. coords: [[290, 300], [50, 300]],
  990. symbol: 'none'
  991. },
  992. {
  993. lineStyle: lineStyle,
  994. coords: [[50, 300],[50, 130]]
  995. },
  996. {
  997. lineStyle: lineStyle,
  998. coords: [[210, 250], [50, 250]],
  999. symbol: 'none'
  1000. },
  1001. {
  1002. lineStyle: lineStyle,
  1003. coords: [[50, 250],[50, 130]]
  1004. },
  1005. {
  1006. lineStyle: lineStyle,
  1007. coords: [[130, 200], [50, 200]],
  1008. symbol: 'none'
  1009. },
  1010. {
  1011. lineStyle: lineStyle,
  1012. coords: [[50, 200],[50, 130]]
  1013. },
  1014. {
  1015. lineStyle: lineStyle,
  1016. coords: [[50, 150], [50, 150]],
  1017. symbol: 'none'
  1018. },
  1019. {
  1020. lineStyle: lineStyle,
  1021. coords: [[50, 150],[50, 130]]
  1022. },
  1023. ]
  1024. }
  1025. let option = {
  1026. xAxis: {
  1027. min: 0,
  1028. max: 760,
  1029. padding: [0, 50, 0, 50],
  1030. show: false,
  1031. type: 'value'
  1032. },
  1033. yAxis: {
  1034. min: 0,
  1035. max: 650,
  1036. show: false,
  1037. type: 'value'
  1038. },
  1039. grid: {
  1040. left: 50,
  1041. right: 0,
  1042. bottom: 0,
  1043. top: 0
  1044. },
  1045. series: [
  1046. {
  1047. type: 'graph',
  1048. coordinateSystem: 'cartesian2d',
  1049. symbol: 'rect',
  1050. symbolSize: [80, 40],
  1051. itemStyle: {
  1052. color: 'rgb(225,7,7)'
  1053. },
  1054. symbolOffset: [10, 0],
  1055. // force: {
  1056. // edgeLength: 100,//连线的长度
  1057. // repulsion: 200 //子节点之间的间距
  1058. // },
  1059. label: {
  1060. show: true,
  1061. color: 'white' // 节点文字颜色
  1062. },
  1063. data: charts.nodes
  1064. },
  1065. {
  1066. type: 'lines',
  1067. polyline: false,
  1068. coordinateSystem: 'cartesian2d',
  1069. symbol: ['', 'arrow'],
  1070. symbolSize: 10,
  1071. data: charts.linesData
  1072. }
  1073. ]
  1074. }
  1075. myCharts.clear()
  1076. myCharts.setOption(option)
  1077. window.addEventListener('resize', () => {
  1078. myCharts.resize()
  1079. })
  1080. })
  1081. },
  1082. handlePictureRemove(file, fileUrlList) {
  1083. var index = fileUrlList.indexOf(file)
  1084. fileUrlList.splice(index, 1)
  1085. },
  1086. uploadFile: function(param) {
  1087. const _this = this
  1088. upload(param, true).then((res) => {
  1089. _this.formData.fileUrlList.push(res)
  1090. })
  1091. },
  1092. downloadFaPiao(url) {
  1093. window.open(url)
  1094. },
  1095. parentMethod(val) {
  1096. if (val.length > 0) {
  1097. this.formData.ccList = val.join(',')
  1098. }
  1099. },
  1100. async getBizeUserList() {
  1101. const { data } = await this.baseRequest1('BugLibraryController', 'listBizUserAll', {})
  1102. this.bizByList = data
  1103. },
  1104. async selectOutOrderDetails(e) {
  1105. const postData = { id: e }
  1106. const { data } = await this.baseRequest1('OutOrderMainController', 'getVoById', postData)
  1107. // ApplyPaymentController/getTotalMoneyByProId
  1108. let index = this.OutOrderList.findIndex((a) => a.id == e)
  1109. const res = await this.baseRequest1('ApplyPaymentController', 'getTotalMoneyByProId', { proId: this.OutOrderList[index].proId })
  1110. const res2 = await this.baseRequest1('ApplyPaymentController', 'getTotalPayMoneyByOrderNo', { orderNo: this.OutOrderList[index].orderNo })
  1111. let fileUrlList = this.formData.fileUrlList
  1112. this.formData = { ...data, fileUrlList: fileUrlList }
  1113. this.formData.projectName = data.proName
  1114. this.formData.customerName = data.custName
  1115. // this.formData.supplierName = data.bizName
  1116. this.formData.bizBy = data.bizBy
  1117. this.formData.dealAt = this.$common.transServDate(data.dealAt)
  1118. this.formData.outTimeline = this.$common.transServDate(data.outTimeline)
  1119. this.formData.orderNo = data.custName + '-' + data.orderNo
  1120. this.formData.orderId = e
  1121. this.formData.totalReturnMoney = res.data.data
  1122. this.formData.totalPayMoney = res2.data.data
  1123. // this.formData.fileUrlList = []
  1124. },
  1125. // /webServer/OutOrderMainController/list
  1126. async getOutOrderList() {
  1127. // 获取采购订单号下拉数据
  1128. const postData = {
  1129. pageNum: 1,
  1130. pageSize: 10000,
  1131. shouldAmount: 0
  1132. }
  1133. const { data } = await this.baseRequest1('OutOrderMainController', 'list', postData)
  1134. this.OutOrderList = data.rows
  1135. },
  1136. baseRequest1(prefix, opUrl, postData) {
  1137. return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
  1138. },
  1139. async confirmSubmit() {
  1140. this.$refs.elformData.validate(async(valid) => {
  1141. if(!this.formData.proId){
  1142. this.$message.warning('请选择项目')
  1143. return
  1144. }
  1145. if(!this.formData.approval.proOverview){
  1146. this.$message.warning('请输入项目概述')
  1147. return
  1148. }
  1149. if(!this.formData.approval.isProfit){
  1150. this.$message.warning('请选择是否实现盈利')
  1151. return
  1152. }
  1153. if(!this.formData.approval.rate){
  1154. this.$message.warning('请输入税率')
  1155. return
  1156. }
  1157. if(!this.formData.approval.implementationContent){
  1158. this.$message.warning('请输入项目实施计划')
  1159. return
  1160. }
  1161. if(this.fileUrlList&&this.fileUrlList.length>0){
  1162. this.formData.approval.implementationProgramme=JSON.stringify(this.fileUrlList)
  1163. }else{
  1164. this.$message.warning('请上传实施方案')
  1165. return
  1166. }
  1167. if(this.fileUrlList2&&this.fileUrlList2.length>0){
  1168. this.formData.approval.researchReport=JSON.stringify(this.fileUrlList2)
  1169. }else{
  1170. this.$message.warning('请上传调研报告')
  1171. return
  1172. }
  1173. if(this.fileUrlList3&&this.fileUrlList3.length>0){
  1174. this.formData.approval.otherFile=JSON.stringify(this.fileUrlList3)
  1175. }
  1176. if(this.SalsReturnPlanData&&this.SalsReturnPlanData.length>0){
  1177. this.formData.workReceivableForm= JSON.stringify(this.SalsReturnPlanData)
  1178. }else{
  1179. this.$message.warning('请添加回款计划')
  1180. return
  1181. }
  1182. if(this.ysInfo){
  1183. this.$message.warning('请添加预算信息')
  1184. return
  1185. }
  1186. this.formData.ctrId = this.ctrId
  1187. this.formData.approval.status = '0'
  1188. this.formData.approval.proId = this.formData.proId
  1189. this.formData.approval.groupId = this.$common.currUser().groupId
  1190. this.formData.groupId = this.$common.currUser().groupId
  1191. this.formData.approvalForm = JSON.stringify(this.formData.approval)
  1192. // this.formData.approval ={}
  1193. if (valid) {
  1194. this.$refs.bids.toSave('1')
  1195. let formData = { ...this.formData }
  1196. formData.approval={}
  1197. this.buttonLoading = true
  1198. const { data } = await this.baseRequest1(
  1199. 'ApplyLxSjWorkController',
  1200. 'addApplyLxWork',
  1201. { ...formData })
  1202. this.buttonLoading = false
  1203. if (data.code == 200) {
  1204. this.$message.success('流程已发起')
  1205. this.dialogLxVisible = false
  1206. this.formData= this.initForm()
  1207. this.fileUrlList = []
  1208. this.fileUrlList2 = []
  1209. this.fileUrlList3 = []
  1210. this.ctrId =''
  1211. this.SalsReturnPlanData = []
  1212. this.$emit('getData')
  1213. }
  1214. //
  1215. } else {
  1216. }
  1217. })
  1218. },
  1219. handleChange(val){
  1220. this.ysInfo = val
  1221. },
  1222. initLxWork(proId,status){
  1223. this.formData.proId = proId
  1224. this.proChange()
  1225. this.setVisible(status)
  1226. },
  1227. setVisible(status, data) {
  1228. this.dialogLxVisible = status
  1229. if (this.$refs.elformData) {
  1230. this.$refs.elformData.clearValidate()
  1231. }
  1232. },
  1233. budGetingRequest(opUrl, postData) {
  1234. return this.$channel.globleRequest('BudgetMakingController', opUrl, postData, 'project')
  1235. },
  1236. ctrMainRequest(opUrl, postData) {
  1237. return this.$channel.globleRequest('CtrMainController', opUrl, postData, 'project')
  1238. },
  1239. proMainRequest(opUrl, postData) {
  1240. return this.$channel.globleRequest('ProMainController', opUrl, postData, 'project')
  1241. }
  1242. }
  1243. }
  1244. </script>
  1245. <style lang="scss">
  1246. #containerPay {
  1247. width: 100%;
  1248. height: 600px;
  1249. background: #F5F5F5;
  1250. }
  1251. .mb25 {
  1252. margin-bottom: 25px;
  1253. }
  1254. .pdtopbottom16 {
  1255. padding: 0px 16px;
  1256. }
  1257. .pdtop16px {
  1258. padding-top: 16px;
  1259. }
  1260. .elformdom {
  1261. label {
  1262. text-align: right;
  1263. font-size: 16px;
  1264. font-family: 微软雅黑;
  1265. padding-right: 10px;
  1266. line-height: 40px;
  1267. word-break: keep-all;
  1268. white-space: nowrap;
  1269. -webkit-font-smoothing: antialiased;
  1270. color: #303133;
  1271. text-rendering: optimizeLegibility;
  1272. font-weight: 400;
  1273. }
  1274. .el-radio {
  1275. height: 15px;
  1276. margin-top: -19px;
  1277. }
  1278. }
  1279. .payform {
  1280. .el-form-item__label {
  1281. text-align: right;
  1282. font-size: 16px;
  1283. font-family: 微软雅黑;
  1284. padding-right: 10px;
  1285. line-height: 40px;
  1286. word-break: keep-all;
  1287. white-space: nowrap;
  1288. font-weight: 400;
  1289. }
  1290. }
  1291. .tabsdom {
  1292. .el-tabs__header {
  1293. text-align: center !important;
  1294. width: 139px !important;
  1295. text-align: center !important;
  1296. display: block !important;
  1297. margin: auto !important;
  1298. margin-bottom: 15px !important;
  1299. }
  1300. .el-tabs__nav-wrap::after {
  1301. display: none;
  1302. }
  1303. }
  1304. .cost_form {
  1305. .col-input {
  1306. font-weight: 400;
  1307. }
  1308. .el-form-item__label {
  1309. text-align: right;
  1310. font-size: 16px;
  1311. font-family: 微软雅黑;
  1312. padding-right: 10px;
  1313. line-height: 40px;
  1314. word-break: keep-all;
  1315. white-space: nowrap;
  1316. color: #606266;
  1317. text-rendering: optimizeLegibility;
  1318. font-weight: 400;
  1319. }
  1320. .el-form-item__label .moneydetails {
  1321. text-align: right;
  1322. font-size: 16px;
  1323. font-family: 微软雅黑;
  1324. padding-right: 10px;
  1325. line-height: 40px;
  1326. word-break: keep-all;
  1327. white-space: nowrap;
  1328. color: #606266;
  1329. text-rendering: optimizeLegibility;
  1330. font-weight: 400;
  1331. }
  1332. }
  1333. </style>