index.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. <template>
  2. <section>
  3. <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
  4. <el-form :inline="true">
  5. <el-form-item label="合同列表" class="toolbar_formitem_n1"></el-form-item>
  6. <!-- 合同编号/名称 -->
  7. <el-form-item>
  8. <div style="display: flex;align-items: center;height: 40px;">
  9. <el-input v-model="keyword" class="input-with-select" placeholder="请输入" clearable size="small">
  10. <el-select slot="prepend" v-model="searchField" placeholder="请选择" style="width:120px">
  11. <el-option label="合同名称" :value="0"></el-option>
  12. <el-option label="合同编号" :value="1"></el-option>
  13. </el-select>
  14. <el-button slot="append" @click="searchFilter" icon="el-icon-search"></el-button>
  15. </el-input>
  16. </div>
  17. </el-form-item>
  18. <!-- 合同类型 -->
  19. <el-form-item>
  20. <span style="margin-left:5px;margin-right:5px;color:#606266;">合同类型</span>
  21. <el-select v-model="typeName" style="width:120px;" placeholder="请选择" @change="searchFilter" size="small" clearable>
  22. <el-option v-for="item in typeList" :key="item.id" :label="item.typeName" :value="item.id"></el-option>
  23. </el-select>
  24. </el-form-item>
  25. <!-- 状态 -->
  26. <el-form-item>
  27. <span style="margin-left:5px;margin-right:5px;color:#606266;">状态</span>
  28. <el-select v-model="status" style="width:120px;" placeholder="请选择" @change="searchFilter" size="small" clearable>
  29. <el-option v-for="item,index in statusList" :key="item.label" :label="item.label" :value="index"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <!-- 创建时间 -->
  33. <el-form-item>
  34. <span style="margin-left:5px;margin-right:5px;color:#606266;">创建时间</span>
  35. <el-date-picker
  36. style="width:240px;"
  37. v-model="dateArray"
  38. type="daterange"
  39. size="small"
  40. range-separator="-"
  41. :start-placeholder="'区间'"
  42. :end-placeholder="'区间'"
  43. value-format="yyyy-MM-dd"
  44. clearable
  45. @change="searchFilter"
  46. ></el-date-picker>
  47. </el-form-item>
  48. <el-form-item style="float:right;">
  49. <el-dropdown>
  50. <el-link type="primary" :underline="false">查看更多<i class="el-icon-arrow-down el-icon--right"></i></el-link>
  51. <el-dropdown-menu slot="dropdown">
  52. <el-dropdown-item v-if="permissions.contractType"><el-link type="primary" :underline="false" @click="typeEdit()">类型编辑</el-link></el-dropdown-item>
  53. <el-dropdown-item v-if="permissions.contractImport"><el-link type="primary" :underline="false" @click="importDialog = true">导入</el-link></el-dropdown-item>
  54. <el-dropdown-item v-if="permissions.contractExport"><el-link type="primary" :underline="false" @click="exportContract()">导出</el-link></el-dropdown-item>
  55. </el-dropdown-menu>
  56. </el-dropdown>
  57. </el-form-item>
  58. <el-form-item style="float:right;" v-if="permissions.contractNew">
  59. <el-link type="primary" :underline="false" @click="newlyAdd()">新增合同</el-link>
  60. </el-form-item>
  61. </el-form>
  62. </el-col>
  63. <el-table :data="contractList" v-loading="listLoading" :height="tableHeight" border highlight-current-row>
  64. <el-table-column prop="number" label="合同编号" min-width="150"></el-table-column>
  65. <el-table-column prop="name" label="合同名称" min-width="150"></el-table-column>
  66. <el-table-column prop="amounts" label="合同金额" min-width="150"></el-table-column>
  67. <el-table-column prop="typeName" label="合同类型" min-width="150"></el-table-column>
  68. <el-table-column prop="status" label="状态" min-width="150">
  69. <template slot-scope="scope">
  70. <span :style="statusList[scope.row.status].color">{{statusList[scope.row.status].label}}</span>
  71. </template>
  72. </el-table-column>
  73. <el-table-column prop="indate" label="创建时间" min-width="150"></el-table-column>
  74. <el-table-column width="300" label="操作" align="left" fixed="right">
  75. <template slot-scope="scope">
  76. <el-button v-if="permissions.contractView || permissions.contractManagement" size="mini" @click="lookover(scope.row)">查看</el-button>
  77. <el-button v-if="permissions.contractManagement" size="mini" @click="editContract(scope.row)" type="primary">编辑</el-button>
  78. <el-button v-if="permissions.contractAudit && (scope.row.status == 1 || scope.row.status == 3)" size="mini" @click="process(scope.row,0)" type="success">通过</el-button>
  79. <el-button v-if="permissions.contractAudit && (scope.row.status == 1 || scope.row.status == 3)" size="mini" @click="process(scope.row,2)" type="danger">驳回</el-button>
  80. </template>
  81. </el-table-column>
  82. </el-table>
  83. <el-col :span="24" class="toolbar">
  84. <el-pagination
  85. @size-change="handleSizeChange"
  86. @current-change="handleCurrentChange"
  87. :page-sizes="[20 , 50 , 80 , 100]"
  88. :page-size="size"
  89. layout="total, sizes, prev, pager, next"
  90. :total="total"
  91. style="float:right;"
  92. ></el-pagination>
  93. </el-col>
  94. <el-dialog :title="dialogTitle + '合同'" :visible.sync="addDialog" v-if="addDialog" :close-on-click-modal="false" customClass="customWidth" width="900px">
  95. <div style="height: 72vh;overflow-y: auto;overflow-x: hidden;">
  96. <el-form ref="contractForm" :model="contractForm" :rules="rules" label-width="120px" class="contractForm">
  97. <el-form-item label="合同编号">
  98. <el-input v-model="contractForm.number" placeholder="请输入" clearable></el-input>
  99. </el-form-item>
  100. <el-form-item label="合同名称" prop='name'>
  101. <el-input v-model="contractForm.name" placeholder="请输入" clearable></el-input>
  102. </el-form-item>
  103. <el-form-item label="合同金额">
  104. <el-input v-model="contractForm.amounts" placeholder="请输入" clearable></el-input>
  105. </el-form-item>
  106. <el-form-item label="合同类型">
  107. <el-select v-model="contractForm.typeId" placeholder="请选择" style="width:100%">
  108. <el-option v-for="item in typeList" :key="item.id" :label="item.typeName" :value="item.id"></el-option>
  109. </el-select>
  110. </el-form-item>
  111. <el-form-item label="计划开始时间">
  112. <el-date-picker
  113. v-model="contractForm.startDate"
  114. value-format="yyyy-MM-dd"
  115. type="date"
  116. placeholder="选择日期">
  117. </el-date-picker>
  118. <span style="float:right;">计划结束时间
  119. <el-date-picker
  120. style="margin-left: 15px;"
  121. v-model="contractForm.endDate"
  122. value-format="yyyy-MM-dd"
  123. type="date"
  124. placeholder="选择日期">
  125. </el-date-picker>
  126. </span>
  127. </el-form-item>
  128. <el-form-item label="备注">
  129. <el-input v-model="contractForm.remarks" placeholder="请输入" type="textarea" :rows="3" clearable></el-input>
  130. </el-form-item>
  131. <el-form-item label-width="0" class="contractFiles">
  132. <div class="contractFiles_title">附件
  133. <el-upload style="float:right;margin-right:5%;" ref="uploadFile" action="#" :http-request="httpRequest" :on-change="fileChange" :auto-upload="false" :show-file-list="false">
  134. <el-link type="primary">新增附件</el-link>
  135. </el-upload>
  136. </div>
  137. <el-table :data="fileList" :header-cell-style="{'font-weight':'normal'}" highlight-current-row
  138. max-height="240" style="width: 100%;margin-top:10px;margin-bottom:15px">
  139. <el-table-column label="序号" min-width="40" align="center">
  140. <template slot-scope="scope">
  141. <div>{{scope.$index + 1}}</div>
  142. </template>
  143. </el-table-column>
  144. <el-table-column label="文件名称" prop="name" min-width="140"></el-table-column>
  145. <!-- <el-table-column label="文件大小" min-width="60">
  146. <template slot-scope="scope">
  147. <div>{{scope.$index + 1}}</div>
  148. </template>
  149. </el-table-column> -->
  150. <el-table-column label="操作" min-width="40">
  151. <template slot-scope="scope">
  152. <el-link @click="fileDelete(scope.row)" type="primary">删除</el-link>
  153. </template>
  154. </el-table-column>
  155. </el-table>
  156. </el-form-item>
  157. </el-form>
  158. </div>
  159. <div slot="footer" class="dialog-footer;">
  160. <el-button @click.native="deleteContract()" style="float:left" v-if="dialogTitle == '编辑'">删除</el-button>
  161. <el-button @click.native="addDialog = false">取消</el-button>
  162. <el-button type="primary" @click="submitInsert()" :loading="submitLoading">提交</el-button>
  163. </div>
  164. </el-dialog>
  165. <el-dialog title="查看合同" :visible.sync="lookoverDialog" v-if="lookoverDialog" :close-on-click-modal="false" customClass="customWidth" width="900px">
  166. <div style="height: 72vh;overflow-y: auto;overflow-x: hidden;">
  167. <el-form label-width="100px" class="lookoverContract clearfix">
  168. <el-form-item label="合同编号">
  169. {{contractForm.number}}
  170. </el-form-item>
  171. <el-form-item label="合同名称">
  172. {{contractForm.name}}
  173. </el-form-item>
  174. <el-form-item label="合同金额">
  175. {{contractForm.amounts}}
  176. </el-form-item>
  177. <el-form-item label="合同类型">
  178. {{contractForm.typeName}}
  179. </el-form-item>
  180. <el-form-item label="状态">
  181. {{statusList[contractForm.status].label}}
  182. </el-form-item>
  183. <el-form-item label="创建人">
  184. <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='userName' :openid='contractForm.creatorName'></ww-open-data></span>
  185. <span v-else>{{contractForm.creatorName}}</span>
  186. </el-form-item>
  187. <el-form-item label="创建时间">
  188. {{contractForm.indate}}
  189. </el-form-item>
  190. <el-form-item label="计划开始时间">
  191. {{contractForm.startDate}}
  192. </el-form-item>
  193. <el-form-item label="计划结束时间">
  194. {{contractForm.endDate}}
  195. </el-form-item>
  196. <el-form-item label="备注">
  197. {{contractForm.remarks}}
  198. </el-form-item>
  199. <el-form-item label-width="0" class="contractFiles">
  200. <div class="contractFiles_title">附件</div>
  201. <el-table :data="fileList" :header-cell-style="{'font-weight':'normal'}" highlight-current-row
  202. max-height="240" style="width: 100%;margin-top:10px;margin-bottom:30px">
  203. <el-table-column label="序号" min-width="40" align="center">
  204. <template slot-scope="scope">
  205. <div>{{scope.$index + 1}}</div>
  206. </template>
  207. </el-table-column>
  208. <el-table-column label="文件名称" prop="name" min-width="140"></el-table-column>
  209. <!-- <el-table-column label="文件大小" min-width="60">
  210. <template slot-scope="scope">
  211. <div>{{scope.$index + 1}}</div>
  212. </template>
  213. </el-table-column> -->
  214. <el-table-column label="操作" min-width="40">
  215. <template slot-scope="scope">
  216. <el-link @click="fileDownload(scope.row)" type="primary">下载</el-link>
  217. </template>
  218. </el-table-column>
  219. </el-table>
  220. </el-form-item>
  221. </el-form>
  222. </div>
  223. </el-dialog>
  224. <el-dialog title="合同类型管理" :visible.sync="typeDialog" v-if="typeDialog" customClass="customWidth" width="500px">
  225. <el-table :data="typeList" highlight-current-row height="400" style="width: 100%;">
  226. <el-table-column type="index" width="60" label="序号">
  227. <template slot-scope="scope">{{ scope.$index + 1 }}</template>
  228. </el-table-column>
  229. <el-table-column prop="typeName"></el-table-column>
  230. <el-table-column label="操作" width="150">
  231. <template slot-scope="scope">
  232. <el-button size="small" type="primary" @click="typeItemEdit(scope.row)">编辑</el-button>
  233. <el-button size="small" type="danger" @click="typeItemDelete(scope.row)">删除</el-button>
  234. </template>
  235. </el-table-column>
  236. </el-table>
  237. <div slot="footer" class="dialog-footer;">
  238. <el-button type="primary" @click="typeDialog = false">关闭</el-button>
  239. <el-button type="primary" @click="typeItemAdd()">新增合同类型</el-button>
  240. </div>
  241. <el-dialog :title="typeTitle + '合同类型'" :visible.sync="typeItemDialog" v-if="typeItemDialog" append-to-body width="400px">
  242. <div style="height: 12vh;overflow-y: auto;overflow-x: hidden;">
  243. <el-input v-model="typeItemForm.typeName"></el-input>
  244. </div>
  245. <div slot="footer" class="dialog-footer;">
  246. <el-button type="primary" @click="typeItemDialog = false">取消</el-button>
  247. <el-button type="primary" @click="typeItemSubmit()">确定</el-button>
  248. </div>
  249. </el-dialog>
  250. </el-dialog>
  251. <el-dialog title="导入合同" :visible.sync="importDialog" v-if="importDialog" width="30%">
  252. <!-- 模板? -->
  253. <div slot="footer" class="dialog-footer" style="text-algin:center;">
  254. <el-upload ref="upload" action="#" :limit="1" :http-request="importContract" :show-file-list="false">
  255. <el-button type="primary" size="small" :loading="importLoading">导入合同</el-button>
  256. </el-upload>
  257. </div>
  258. </el-dialog>
  259. </section>
  260. </template>
  261. <script>
  262. export default {
  263. data() {
  264. return {
  265. user: JSON.parse(sessionStorage.getItem("user")),
  266. permissions: JSON.parse(sessionStorage.getItem("permissions")),
  267. searchField: 0,
  268. keyword: '',
  269. typeName: '',
  270. status: '',
  271. dateArray: [],
  272. typeList: [],
  273. contractList: [],
  274. listLoading: false,
  275. statusList: [
  276. {label:'审核通过',color: 'color:#67c23a;'},
  277. {label:'待审核',color: 'color:#e6a23c;'},
  278. {label:'已驳回',color: 'color:#f56c6c;'},
  279. {label:'导入待审核',color: 'color:#e6a23c;'},
  280. ],
  281. typeDialog: false,
  282. typeTitle: '新增',
  283. typeItemDialog: false,
  284. typeItemForm: {typeName: ''},
  285. dialogTitle: '新增',
  286. addDialog: false,
  287. lookoverDialog: false,
  288. submitLoading: false,
  289. contractForm: {
  290. number: '',
  291. name: '',
  292. amounts: '',
  293. typeId: null,
  294. remarks: '',
  295. startDate: '',
  296. endDate: ''
  297. },
  298. rules:{
  299. name: [{ required: true, message: '请输入名称', trigger: "blur" }],
  300. },
  301. fileList: [],
  302. importDialog: false,
  303. importLoading: false,
  304. page: 1,
  305. size: 20,
  306. total: 0,
  307. tableHeight: 0
  308. }
  309. },
  310. created() {
  311. let height = window.innerHeight;
  312. this.tableHeight = height - 180;
  313. const that = this;
  314. window.onresize = function temp() {
  315. that.tableHeight = window.innerHeight - 185;
  316. };
  317. },
  318. mounted() {
  319. this.getContractList()
  320. this.getContractType()
  321. },
  322. methods: {
  323. test(row){
  324. console.log('test',row);
  325. // this.$refs.uploadFile.submit()
  326. },
  327. searchFilter(){
  328. this.page = 1
  329. this.getContractList()
  330. },
  331. handleSizeChange(val){
  332. this.size = val
  333. this.page = 1
  334. this.getContractList()
  335. },
  336. handleCurrentChange(val){
  337. this.page = val;
  338. this.getContractList()
  339. },
  340. importContract(item){
  341. let str = item.file.name.split('.')
  342. let format = str[str.length - 1];
  343. if(format != "xls" && format != "xlsx"){
  344. this.$message({
  345. message: '请选择.xls或.xlsx文件',
  346. type: 'error'
  347. })
  348. }else{
  349. this.importLoading = true
  350. let formData = new FormData();
  351. formData.append("file", item.file);
  352. formData.append("userId", this.user.id);
  353. this.http.uploadFile('/contract/importContract',formData,
  354. res => {
  355. this.$refs.upload.clearFiles();
  356. this.importLoading = false;
  357. if(res.code == 'ok'){
  358. this.importDialog = false
  359. this.$message({
  360. message: '导入成功',
  361. type: 'success'
  362. })
  363. this.getContractList()
  364. }else{
  365. this.$message({
  366. message: res.msg,
  367. type: 'error'
  368. })
  369. }
  370. },err => {
  371. this.importLoading = false;
  372. this.$message({
  373. message: err,
  374. type: 'error'
  375. })
  376. })
  377. }
  378. },
  379. exportContract(){
  380. let parameter = {}
  381. if(this.typeName){
  382. parameter.typeName = this.typeName
  383. }
  384. if(this.keyword){
  385. if(this.searchField){
  386. parameter.number = this.keyword
  387. }else{
  388. parameter.name = this.keyword
  389. }
  390. }
  391. if(this.status !== ''){
  392. parameter.status = this.status
  393. }
  394. if(this.dateArray && this.dateArray.length == 2){
  395. parameter.startDate = this.dateArray[0]
  396. parameter.endDate = this.dateArray[1]
  397. }
  398. this.http.post('/contract/ExportContract',parameter,
  399. res => {
  400. if(res.code == 'ok'){
  401. let filePath = res.data;
  402. const a = document.createElement('a'); // 创建a标签
  403. a.setAttribute('download', '合同导出' + '.xls');// download属性
  404. a.setAttribute('href', filePath);// href链接
  405. a.click(); //自执行点击事件
  406. a.remove();
  407. }else{
  408. this.$message({
  409. message: res.msg,
  410. type: 'error'
  411. })
  412. }
  413. },err => {
  414. this.$message({
  415. message: err,
  416. type: 'error'
  417. })
  418. })
  419. },
  420. typeEdit(){
  421. this.typeDialog = true
  422. },
  423. typeItemAdd(){
  424. this.typeTitle = '新增'
  425. this.typeItemForm = {typeName: ''}
  426. this.typeItemDialog = true
  427. },
  428. typeItemEdit(row){
  429. this.typeTitle = '编辑'
  430. this.typeItemForm = JSON.parse(JSON.stringify(row))
  431. this.typeItemDialog = true
  432. },
  433. typeItemDelete(row){
  434. this.$confirm('确定要删除此条合同类型吗?', '提示', {
  435. confirmButtonText: '确定',
  436. cancelButtonText: '取消',
  437. type: 'warning'
  438. }).then(() => {
  439. this.http.post('/contractType/deleteContractType',{
  440. deleteId: row.id
  441. },res => {
  442. if(res.code == 'ok'){
  443. this.getContractType()
  444. this.$message({
  445. type: 'success',
  446. message: '删除成功!'
  447. });
  448. }else{
  449. this.$message({
  450. type: 'error',
  451. message: res.msg
  452. });
  453. }
  454. },err => {
  455. this.$message({
  456. type: 'error',
  457. message: err
  458. });
  459. })
  460. }).catch(() => {
  461. this.$message({
  462. type: 'info',
  463. message: '已取消删除'
  464. });
  465. });
  466. },
  467. typeItemSubmit(){
  468. this.http.post('/contractType/changeContractType',this.typeItemForm,
  469. res => {
  470. if(res.code == 'ok'){
  471. this.typeItemDialog = false
  472. this.getContractType()
  473. this.$message({
  474. message: this.typeTitle + '成功',
  475. type: 'success'
  476. })
  477. }else{
  478. this.$message({
  479. message: res.msg,
  480. type: 'error'
  481. })
  482. }
  483. },err => {
  484. this.$message({
  485. message: err,
  486. type: 'error'
  487. })
  488. })
  489. },
  490. newlyAdd(){
  491. this.dialogTitle = '新增'
  492. this.contractForm = {
  493. number: '',
  494. name: '',
  495. amounts: '',
  496. typeId: null,
  497. remarks: '',
  498. startDate: '',
  499. endDate: ''
  500. }
  501. this.fileList = []
  502. this.addDialog = true
  503. },
  504. editContract(row){
  505. this.dialogTitle = '编辑'
  506. this.contractForm = JSON.parse(JSON.stringify(row))
  507. this.fileList = this.contractForm.files ? this.contractForm.files : []
  508. for(let i in this.fileList){
  509. this.fileList[i].name = this.fileList[i].documentName
  510. }
  511. this.addDialog = true
  512. },
  513. deleteContract(){
  514. this.$confirm('确定要删除该合同吗?', '提示', {
  515. confirmButtonText: '确定',
  516. cancelButtonText: '取消',
  517. type: 'warning'
  518. }).then(() => {
  519. this.http.post('/contract/deleteContract',{
  520. id: this.contractForm.id
  521. },res => {
  522. if(res.code == 'ok'){
  523. this.addDialog = false
  524. this.getContractList()
  525. this.$message({
  526. type: 'success',
  527. message: '删除成功!'
  528. });
  529. }else{
  530. this.$message({
  531. type: 'error',
  532. message: res.msg
  533. });
  534. }
  535. },err => {
  536. this.$message({
  537. type: 'error',
  538. message: err
  539. });
  540. })
  541. }).catch(() => {
  542. this.$message({
  543. type: 'info',
  544. message: '已取消删除'
  545. });
  546. });
  547. },
  548. process(row,status){
  549. this.http.post('/contract/processContract',{
  550. id: row.id,
  551. status: status
  552. },res => {
  553. if(res.code == 'ok'){
  554. row.status = status
  555. this.$message({
  556. message: status == 0 ? '已通过' : '已驳回',
  557. type: 'success'
  558. })
  559. }else{
  560. this.$message({
  561. message: res.msg,
  562. type: 'error'
  563. })
  564. }
  565. },err => {
  566. this.$message({
  567. message: err,
  568. type: 'error'
  569. })
  570. })
  571. },
  572. lookover(row){
  573. console.log('lookover',row);
  574. this.contractForm = row
  575. this.fileList = this.contractForm.files ? this.contractForm.files : []
  576. for(let i in this.fileList){
  577. this.fileList[i].name = this.fileList[i].documentName
  578. }
  579. this.lookoverDialog = true
  580. },
  581. submitInsert(){
  582. this.$refs.contractForm.validate(valid => {
  583. if (valid) {
  584. this.submitLoading = true
  585. delete this.contractForm.files
  586. this.http.post(this.dialogTitle == '新增' ? '/contract/addContract' : '/contract/editContract',this.contractForm,
  587. res => {
  588. this.submitLoading = false
  589. this.addDialog = false
  590. if(res.code == 'ok'){
  591. this.$message({
  592. message: res.msg,
  593. type: 'success'
  594. })
  595. if(this.dialogTitle == '新增'){
  596. this.contractForm.id = res.data
  597. }
  598. this.submitFile()
  599. }else{
  600. this.$message({
  601. message: res.msg,
  602. type: 'error'
  603. })
  604. }
  605. },err => {
  606. this.submitLoading = false
  607. this.addDialog = false
  608. this.$message({
  609. message: err,
  610. type: 'error'
  611. })
  612. })
  613. }
  614. })
  615. },
  616. fileChange(file,fileList){
  617. // console.log('fileChange',file,fileList);
  618. file.needUpload = true
  619. this.fileList.push(file)
  620. },
  621. fileDelete(row){
  622. console.log(row,this.fileList);
  623. this.$confirm('确定要删除该文件吗?', '提示', {
  624. confirmButtonText: '确定',
  625. cancelButtonText: '取消',
  626. type: 'warning'
  627. }).then(() => {
  628. if(row.uid){
  629. for(let i in this.fileList){
  630. if(this.fileList[i].uid && this.fileList[i].uid == row.uid){
  631. this.fileList.splice(i,1)
  632. }
  633. }
  634. }else{
  635. this.http.post('/contract-document/fileDelete',{
  636. contractId: this.contractForm.id,
  637. fileIds: [row.id]
  638. },res => {
  639. if(res.code == 'ok'){
  640. this.getContractList()
  641. this.fileList.filter(item => !item.id || item.id != row.id)
  642. this.$message({
  643. type: 'success',
  644. message: '删除成功!'
  645. });
  646. }else{
  647. this.$message({
  648. type: 'error',
  649. message: res.msg
  650. });
  651. }
  652. },err => {
  653. this.$message({
  654. type: 'error',
  655. message: err
  656. });
  657. })
  658. }
  659. }).catch(() => {
  660. this.$message({
  661. type: 'info',
  662. message: '已取消删除'
  663. });
  664. });
  665. },
  666. fileDownload(row){
  667. this.http.downloadFile('/contract-document/fileDown',{
  668. contractId: this.contractForm.id,
  669. fileId: row.id
  670. },row.name,err=>{
  671. this.$message({
  672. message: err,
  673. type: 'error'
  674. })
  675. })
  676. },
  677. submitFile(){
  678. console.log('submitFile',this.fileList);
  679. let formData = new FormData();
  680. for(let i in this.fileList){
  681. if(this.fileList[i].needUpload){
  682. formData.append("file", this.fileList[i].raw);
  683. }
  684. }
  685. formData.append("ContractId", this.contractForm.id);
  686. this.http.uploadFile('/contract-document/fileUpload',formData,
  687. res => {
  688. if(res.code == 'ok'){
  689. this.getContractList()
  690. }else{
  691. this.$message({
  692. message: res.msg,
  693. type: 'error'
  694. })
  695. }
  696. },err => {
  697. this.$message({
  698. message: err,
  699. type: 'error'
  700. })
  701. })
  702. },
  703. getContractType(){
  704. this.http.post('/contractType/getContractType',{},
  705. res=>{
  706. if(res.code=='ok'){
  707. this.typeList = res.data
  708. }else{
  709. this.$message({
  710. message: res.msg,
  711. type: 'error'
  712. })
  713. }
  714. },err=>{
  715. this.$message({
  716. message: err,
  717. type: 'error'
  718. })
  719. })
  720. },
  721. getContractList(){
  722. // pageIndex,pageSize,number,name,typeName,status,startDate,endDate
  723. let parameter = {
  724. pageIndex: this.page,
  725. pageSize: this.size,
  726. }
  727. if(this.typeName){
  728. parameter.typeName = this.typeName
  729. }
  730. if(this.keyword){
  731. if(this.searchField){
  732. parameter.number = this.keyword
  733. }else{
  734. parameter.name = this.keyword
  735. }
  736. }
  737. if(this.status !== ''){
  738. parameter.status = this.status
  739. }
  740. if(this.dateArray && this.dateArray.length == 2){
  741. parameter.startDate = this.dateArray[0]
  742. parameter.endDate = this.dateArray[1]
  743. }
  744. this.listLoading = true
  745. this.http.post('/contract/getContractPage',parameter,
  746. res => {
  747. this.listLoading = false
  748. if(res.code == 'ok'){
  749. this.contractList = res.data.data
  750. this.total = res.data.total
  751. }else{
  752. this.$message({
  753. message: res.msg,
  754. type: 'error'
  755. })
  756. }
  757. },err => {
  758. this.listLoading = false
  759. this.$message({
  760. message: err,
  761. type: 'error'
  762. })
  763. })
  764. }
  765. },
  766. }
  767. </script>
  768. <style>
  769. .lookoverContract{
  770. margin-top: 30px;
  771. }
  772. .lookoverContract .el-form-item{
  773. width: 50%;
  774. float: left;
  775. }
  776. .lookoverContract .el-form-item__label{
  777. font-weight: 600;
  778. }
  779. .lookoverContract .contractFiles{
  780. width: 100%;
  781. }
  782. .lookoverContract .contractFiles_title{
  783. margin-left: 5%;
  784. font-size: 16px;
  785. line-height: 20px;
  786. margin-top: 16px;
  787. }
  788. .contractForm{
  789. margin-top: 30px;
  790. }
  791. .contractForm .el-form-item{
  792. width: 90%;
  793. }
  794. .contractForm .contractFiles{
  795. width: 100%;
  796. }
  797. .contractForm .contractFiles_title{
  798. margin-left: 5%;
  799. font-size: 16px;
  800. line-height: 20px;
  801. margin-top: 16px;
  802. }
  803. </style>