index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. <template>
  2. <div>
  3. <el-breadcrumb class="heading">
  4. <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
  5. <el-breadcrumb-item :to="{ path: '/oilsupplier/oilcontract' }">服务商年度评价审核</el-breadcrumb-item>
  6. </el-breadcrumb>
  7. <el-card class="box-card" style="height: calc(100vh - 115px);">
  8. <div slot="header">
  9. <span>
  10. <i class="icon icon-table2"></i> 服务商年度评价审核
  11. </span>
  12. <span style="float: right;">
  13. <!-- <router-link :to="'/oilcontract/contract-basis-year-single/add/operation'">
  14. <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;">添加</el-button>
  15. </router-link> -->
  16. <!-- <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;">导入</el-button> -->
  17. <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="exportExcel">导出</el-button>
  18. <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" v-if="!selectAllButtonBoolean&&userSelectBoolean" @click="onSelectAllButton">一键审批</el-button>
  19. <el-button type="info" size="mini" style="margin-left:10px; margin-top: -4px;" v-if="selectAllButtonBoolean" @click="onSelectAllButtonDelete">取消</el-button>
  20. <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" v-if="selectAllButtonBoolean" @click="onSelectAllButtonTrue">确定</el-button>
  21. </span>
  22. <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
  23. <el-form-item label="上报时间">
  24. <el-date-picker size="mini" style="width: 220px" v-model="CreateOn" type="daterange" range-separator="至"
  25. start-placeholder="生成日期" end-placeholder="结束日期"></el-date-picker>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-dropdown split-button type="primary" size="mini" @click="handleSearch" @command="searchCommand">
  29. 查询
  30. <el-dropdown-menu slot="dropdown">
  31. <el-dropdown-item command="search">高级查询</el-dropdown-item>
  32. <el-dropdown-item command="clear">查询重置</el-dropdown-item>
  33. </el-dropdown-menu>
  34. </el-dropdown>
  35. </el-form-item>
  36. </el-form>
  37. </div>
  38. <el-table id="rebateSetTable" highlight-current-row stripe size="mini" :data="entityList" border height="calc(100vh - 243px)" style="width: 100%" @sort-change="orderby" @selection-change="onSelectAll">
  39. <el-table-column v-if="selectAllButtonBoolean" :selectable="selectableFun" type="selection" width="55"></el-table-column>
  40. <el-table-column
  41. align="center"
  42. fixed
  43. type="selection"
  44. v-if="selectBoolean"
  45. width="70">
  46. </el-table-column>
  47. <el-table-column label="操作" min-width="210" align="center" fixed>
  48. <template slot-scope="scope">
  49. <el-button type="text" v-if="editeBoolean" size="small" icon="el-icon-edit" @click="onNavigateScore(scope.row)">编辑</el-button>
  50. <el-button type="text" v-else size="small" icon="el-icon-edit" @click="onNavigateScore(scope.row)">查看</el-button>
  51. <el-popover placement="top" title="提示" :ref="'popover-' + `${scope.$index}`" v-if="deleteBoolean&&scope.row.Status<=0">
  52. <el-alert
  53. title=""
  54. description="确认要删除吗?"
  55. type="warning"
  56. :closable="false">
  57. </el-alert>
  58. <br/>
  59. <div style="text-align: right; margin: 0">
  60. <el-button type="primary" size="mini" @click="deleteEntity(scope.row,scope.$index)">删除</el-button>
  61. </div>
  62. <el-button slot="reference" type="text" icon="el-icon-delete" style="margin-left:3px" size="small" >
  63. 删除
  64. </el-button>
  65. </el-popover>
  66. </template>
  67. </el-table-column>
  68. <!-- <el-table-column v-for="column in tableColumns" :key="column.Id"
  69. v-if="column.prop != 'CreateOn'" :prop="column.prop" sortable min-width="100" :label="column.label" align="center" show-overflow-tooltip>
  70. <template slot-scope="scope">
  71. <div>{{tableFun(column.prop,scope.row[column.prop])}}</div>
  72. </template>
  73. </el-table-column> -->
  74. <el-table-column sortable show-overflow-tooltip prop="SupplierName" header-align="center" width="130" label="服务商名称"></el-table-column>
  75. <el-table-column sortable show-overflow-tooltip prop="Status" header-align="center" width="130" label="状态">
  76. <template slot-scope="scope" >
  77. <div>{{columnFun(scope.row.Status)}}</div>
  78. </template>
  79. </el-table-column>
  80. <el-table-column sortable show-overflow-tooltip prop="Year" header-align="center" width="130" label="年度"></el-table-column>
  81. <el-table-column sortable show-overflow-tooltip prop="SumScore" header-align="center" label="评价得分" width="120"></el-table-column>
  82. <el-table-column sortable show-overflow-tooltip label="评价内容及得分" align="center">
  83. <el-table-column sortable show-overflow-tooltip prop="SumScore1" align="center" label="项目管理(40分)" width="140"></el-table-column>
  84. <el-table-column sortable show-overflow-tooltip prop="SumScore2" align="center" label="HSE管理(30分)" width="140"></el-table-column>
  85. <el-table-column sortable show-overflow-tooltip prop="SumScore3" align="center" label="合同履行(15分)" width="140"></el-table-column>
  86. <el-table-column sortable show-overflow-tooltip prop="SumScore4" align="center" label="企业诚信(15分)" width="140"></el-table-column>
  87. </el-table-column>
  88. <el-table-column sortable show-overflow-tooltip prop="Conclusion" label="评价结果" align="center" >
  89. <template slot-scope="scope">
  90. {{evaluateFun(scope.row.Conclusion)}}
  91. </template>
  92. </el-table-column>
  93. <el-table-column sortable show-overflow-tooltip prop="Result1" label="业绩评价结果" header-align="center" width="150">
  94. <template slot-scope="scope">
  95. {{scope.row.Result1}}
  96. </template>
  97. </el-table-column>
  98. <el-table-column sortable show-overflow-tooltip prop="Result2" label="基本条件评价结果" header-align="center" width="160">
  99. <template slot-scope="scope">
  100. {{scope.row.Result2}}
  101. </template>
  102. </el-table-column>
  103. <!--<el-table-column prop="CreateOn" sortable min-width="150" label="生成时间" align="center" show-overflow-tooltip>
  104. <template slot-scope="scope">
  105. {{ jstimehandle(scope.row.CreateOn+'') }}
  106. </template>
  107. </el-table-column>-->
  108. </el-table>
  109. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
  110. :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="currentItemCount">
  111. </el-pagination>
  112. </el-card>
  113. <!-- :selectDeptBoolean="false"-->
  114. <submitPopup ref="submitpopup" :examineType="1" :selectDeptBoolean="false" :eveId="eveIdList" @refreshPage="initDatas" ></submitPopup>
  115. <el-dialog title="高级查询" :visible.sync="dialogVisible" width="720px" class="advancedsearchFormClass">
  116. <el-form ref="advancedsearchForm" label-width="110px">
  117. <el-row>
  118. <el-col :span="12">
  119. <el-form-item label="生成时间">
  120. <el-date-picker size="mini" v-model="CreateOn" type="daterange" style="width:100%" range-separator="至"
  121. start-placeholder="生成日期" end-placeholder="结束日期"></el-date-picker>
  122. </el-form-item>
  123. </el-col>
  124. <el-col :span="12">
  125. <el-form-item label="服务商名称">
  126. <el-input size="mini" v-model="searchForm.SupplierName" style="width:100%" placeholder="请输入"></el-input>
  127. </el-form-item>
  128. </el-col>
  129. <el-col :span="12">
  130. <el-form-item label="评价结果">
  131. <el-select v-model="searchForm.Conclusion" placeholder="请选择" >
  132. <el-option key="1" label="优秀" value="1"></el-option>
  133. <el-option key="2" label="合格" value="2"></el-option>
  134. <el-option key="3" label="不合格" value="3"></el-option>
  135. </el-select>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="12">
  139. <el-form-item label="状态">
  140. <el-select v-model="searchForm.Status" placeholder="请选择" >
  141. <el-option key="0" label="初始" value="0"></el-option>
  142. <el-option key="1" label="待二级初审" value="1"></el-option>
  143. <el-option key="2" label="待二级复审" value="2"></el-option>
  144. <el-option key="3" label="专业科室接收" value="3"></el-option>
  145. <el-option key="4" label="待专业科室审核" value="4"></el-option>
  146. <el-option key="5" label="待集中评审" value="5"></el-option>
  147. <el-option key="6" label="待交费" value="6"></el-option>
  148. <el-option key="7" label="待企管审批" value="7"></el-option>
  149. <el-option key="8" label="完成" value="8"></el-option>
  150. <el-option key="9" label="审核未通过" value="9"></el-option>
  151. </el-select>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="12">
  155. <el-form-item label="评价得分">
  156. <el-input-number size="mini" v-model="searchForm.SumScore" max="100" min="0" placeholder="请输入" style="width: 100%" />
  157. </el-form-item>
  158. </el-col>
  159. <el-col :span="12">
  160. <el-form-item label="项目管理得分">
  161. <el-input-number size="mini" v-model="searchForm.SumScore1" max="40" min="0" placeholder="请输入" style="width: 100%" />
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="12">
  165. <el-form-item label="HES管理得分">
  166. <el-input-number size="mini" v-model="searchForm.SumScore2" max="30" min="0" placeholder="请输入" style="width: 100%" />
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="12">
  170. <el-form-item label="合同履行得分">
  171. <el-input-number size="mini" v-model="searchForm.SumScore3" max="15" min="0" placeholder="请输入" style="width: 100%" />
  172. </el-form-item>
  173. </el-col>
  174. <el-col :span="12">
  175. <el-form-item label="企业诚信得分">
  176. <el-input-number size="mini" v-model="searchForm.SumScore4" max="15" min="0" placeholder="请输入" style="width: 100%" />
  177. </el-form-item>
  178. </el-col>
  179. <el-col :span="12">
  180. <el-form-item label="备注">
  181. <el-input size="mini" v-model="searchForm.Remark" type="textarea" style="width:100%" placeholder="请输入"></el-input>
  182. </el-form-item>
  183. </el-col>
  184. </el-row>
  185. </el-form>
  186. <span slot="footer" class="dialog-footer">
  187. <el-button size="mini" @click="dialogVisible = false">取 消</el-button>
  188. <el-button size="mini" type="primary" @click="handleSearch">查 询</el-button>
  189. </span>
  190. </el-dialog>
  191. </div>
  192. </template>
  193. <script>
  194. import { mapGetters } from 'vuex';
  195. import apiContract from '@/api/oilcontract/contract';
  196. import api from '@/api/oilcontract/contractSumScore';
  197. import permissionApi from '@/api/oilcontract/permission';
  198. import FileSaver from 'file-saver'
  199. import XLSX from 'xlsx'
  200. export default {
  201. computed: {
  202. ...mapGetters({
  203. authUser: 'authUser'
  204. })
  205. },
  206. computed:{
  207. evaluateFun:function(){
  208. return function(item){
  209. var index = Number(item)
  210. switch(index){
  211. case 1:
  212. return '优秀'
  213. break;
  214. case 2:
  215. return '合格'
  216. break;
  217. case 3:
  218. return '不合格'
  219. break;
  220. default:
  221. return '--'
  222. }
  223. }
  224. },
  225. columnFun:function(){
  226. return function(item){
  227. var index = Number(item)
  228. switch(index){
  229. case 0:
  230. return '已保存'
  231. break;
  232. case 1:
  233. return '待初审'
  234. break;
  235. case 2:
  236. return '待复审'
  237. break;
  238. case 3:
  239. return '专业科室接收'
  240. break;
  241. case 4:
  242. return '待专业科室审核'
  243. break;
  244. case 7:
  245. return '待企管法规处审批'
  246. break;
  247. case 8:
  248. return '已完成'
  249. break;
  250. case -1:
  251. return '初审未通过'
  252. break;
  253. case -2:
  254. return '复审未通过'
  255. break;
  256. case -3:
  257. return '专业处室未通过'
  258. break;
  259. case -4:
  260. return '专业处室审核未通过'
  261. break;
  262. case -7:
  263. return '企管法规处审批未通过'
  264. break;
  265. default:
  266. return '--'
  267. break;
  268. }
  269. }
  270. }
  271. },
  272. name: 'oilcontract',
  273. data() {
  274. return {
  275. userSelectBoolean:false,
  276. eveIdList:'',
  277. selectAllButtonBoolean:false,
  278. editeBoolean:false,
  279. deleteBoolean:false,
  280. selectBoolean:false,//表格选项框
  281. dialogVisible: false,
  282. //列表数据
  283. entityList: [],
  284. //分页参数
  285. size: 10,
  286. currentPage: 1,
  287. currentItemCount: 0,
  288. //列表排序
  289. Column: {
  290. Order: '',
  291. Prop: ''
  292. },
  293. //查询时间new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000), new Date()
  294. CreateOn: [],
  295. //查询项
  296. searchFormReset: {},
  297. searchForm: {
  298. Id: '',
  299. SupplierId: '',
  300. SupplierName: '',
  301. Conclusion:'',
  302. Status:'',
  303. SumScore:'',
  304. SumScore1:'',
  305. SumScore2:'',
  306. SumScore3:'',
  307. SumScore4:'',
  308. Remark: '',
  309. },
  310. }
  311. },
  312. created() {
  313. //查询条件初始值备份
  314. Object.assign(this.searchFormReset, this.searchForm);
  315. //查询列表
  316. this.initDatas();
  317. //this.getDictOptions()
  318. this.statusFun()
  319. },
  320. methods: {
  321. // 导出
  322. exportExcel () {
  323. //分页及列表条件
  324. let params = {
  325. _currentPage: this.currentPage,
  326. _size: this.size,
  327. Order: this.Column.Order,
  328. Prop: this.Column.Prop,
  329. ContractClass:'03',
  330. }
  331. let myCreateOn = []
  332. // 解析时间
  333. if (this.CreateOn.length == 2) {
  334. this.CreateOn[1].setHours(23)
  335. this.CreateOn[1].setMinutes(59)
  336. this.CreateOn[1].setSeconds(59)
  337. myCreateOn.push(this.formatDateTime(this.CreateOn[0]))
  338. myCreateOn.push(this.formatDateTime(this.CreateOn[1]))
  339. }
  340. //查询条件
  341. Object.assign(params, this.searchForm)
  342. api.docexportExcel(myCreateOn.join(','), params, this.$axios).then(res => {
  343. if (res.data.code === 0) {
  344. let docurl = res.data.item
  345. // 内网服务器专用
  346. const myDomain = window.location.host
  347. if (process.client && docurl.indexOf('upfile') === 0) {
  348. const myDomain = window.location.host
  349. location.href = 'http://' + myDomain + '/' + docurl
  350. } else {
  351. location.href = 'http://' + docurl
  352. }
  353. }
  354. }).catch(err => {
  355. console.error(err)
  356. })
  357. },
  358. //一键处理
  359. onSelectAll(e){
  360. console.log(e)
  361. var list = []
  362. e.map((item,index) => {
  363. list.push(item.Id)
  364. })
  365. this.eveIdList = String(list)
  366. },
  367. //筛选
  368. selectableFun(row,index){
  369. if(row.Status==4){
  370. return true;
  371. }else{
  372. return false;
  373. }
  374. },
  375. //一键处理按钮
  376. onSelectAllButton(){
  377. this.selectAllButtonBoolean = true
  378. },
  379. //一键处理确定
  380. onSelectAllButtonTrue(){
  381. if(this.eveIdList!=''&&this.eveIdList!=undefined){
  382. this.$refs.submitpopup.dialogCommonAuditMakeSureVisible = true
  383. }else{
  384. this.$message({
  385. type: 'warning',
  386. message: '请选择评价'
  387. });
  388. }
  389. },
  390. //一键处理取消
  391. onSelectAllButtonDelete(){
  392. this.selectAllButtonBoolean = false
  393. },
  394. //状态判断
  395. statusFun(){
  396. // 一键处理权限
  397. var data = {
  398. percode:'oil_contract.SumStore.Batch',
  399. }
  400. permissionApi.permissionIsauth(data, this.$axios).then(res => {
  401. console.log('一键处理权限权限',res.data)
  402. if(res.data.code==0){
  403. if(res.data.message=='有权限'){
  404. this.userSelectBoolean = true
  405. }
  406. }
  407. }).catch(err => {
  408. console.error(err)
  409. })
  410. var data = {
  411. percode:'oil_contract.SumStore.Delete',
  412. }
  413. permissionApi.permissionIsauth(data, this.$axios).then(res => {
  414. console.log('权限',res.data)
  415. if(res.data.code==0){
  416. if(res.data.message=='有权限'){
  417. this.deleteBoolean = true
  418. }
  419. }
  420. }).catch(err => {
  421. console.error(err)
  422. })
  423. var data = {
  424. percode:'oil_contract.SumStore.Edit',
  425. }
  426. permissionApi.permissionIsauth(data, this.$axios).then(res => {
  427. console.log('权限',res.data)
  428. if(res.data.code==0){
  429. if(res.data.message=='有权限'){
  430. this.editeBoolean = true
  431. }
  432. }
  433. }).catch(err => {
  434. console.error(err)
  435. })
  436. },
  437. //跳转评价
  438. onNavigateScore(item){
  439. console.log('跳转',item)
  440. this.$router.push({
  441. path:'/oilcontract/contract-service-year/' + item.Id + '/operation',
  442. query:{
  443. item:item
  444. }
  445. })
  446. },
  447. initDatas() {
  448. //分页及列表条件
  449. let params = {
  450. _currentPage: this.currentPage,
  451. _size: this.size,
  452. Order: this.Column.Order,
  453. Prop: this.Column.Prop,
  454. ContractClass:'03',
  455. }
  456. let myCreateOn = []
  457. // 解析时间
  458. if (this.CreateOn.length == 2) {
  459. this.CreateOn[1].setHours(23)
  460. this.CreateOn[1].setMinutes(59)
  461. this.CreateOn[1].setSeconds(59)
  462. myCreateOn.push(this.formatDateTime(this.CreateOn[0]))
  463. myCreateOn.push(this.formatDateTime(this.CreateOn[1]))
  464. }
  465. //查询条件
  466. Object.assign(params, this.searchForm)
  467. //访问接口
  468. api.getList(myCreateOn.join(','), params, this.$axios).then(res => {
  469. this.entityList = res.data.items
  470. this.currentItemCount = res.data.currentItemCount
  471. }).catch(err => {
  472. console.error(err)
  473. })
  474. },
  475. getDictOptions() {
  476. api.getDictList(this.$axios).then(res => {
  477. //this.dictOptions.customerList = res.data.items['customerList']
  478. //this.dictOptions.projectList = res.data.items['projectList']
  479. }).catch(err => {
  480. console.error(err)
  481. })
  482. },
  483. searchCommand(command) {
  484. if (command == 'search') {
  485. this.dialogVisible = true
  486. } else if (command == 'clear') {
  487. this.clearSearch()
  488. }
  489. },
  490. //列表排序功能
  491. orderby(column) {
  492. if (column.order == 'ascending') {
  493. this.Column.Order = 'asc'
  494. } else if (column.order == 'descending') {
  495. this.Column.Order = 'desc'
  496. }
  497. this.Column.Prop = column.prop
  498. this.initDatas()
  499. },
  500. clearSearch() {
  501. Object.assign(this.searchForm, this.searchFormReset);
  502. //this.searchForm = this.searchFormReset;
  503. this.CreateOn = ''
  504. this.initDatas()
  505. },
  506. handleSearch() {
  507. this.currentPage = 1;
  508. this.dialogVisible = false;
  509. this.initDatas();
  510. },
  511. handleCurrentChange(value) {
  512. this.currentPage = value
  513. this.initDatas()
  514. },
  515. handleSizeChange(value) {
  516. this.size = value
  517. this.currentPage = 1
  518. this.initDatas()
  519. },
  520. deleteEntity(row,index) {
  521. this.$refs['popover-' + `${index}`].doClose()
  522. api.deleteEntity(row.Id, this.$axios).then(res => {
  523. if (res.data.code === 0) {
  524. this.initDatas();
  525. this.$message({
  526. type: 'success',
  527. message: res.data.message
  528. });
  529. } else {
  530. this.$message({
  531. type: 'warning',
  532. message: res.data.message
  533. });
  534. }
  535. }).catch(err => {
  536. console.error(err)
  537. });
  538. },
  539. jstimehandle(val) {
  540. if (val === '') {
  541. return '----'
  542. } else if (val === '0001-01-01T08:00:00+08:00') {
  543. return '----'
  544. } else if (val === '5000-01-01T23:59:59+08:00') {
  545. return '永久'
  546. } else {
  547. val = val.replace('T', ' ')
  548. return val.substring(0, 10)
  549. }
  550. },
  551. formatDateTime(date) {
  552. var y = date.getFullYear();
  553. var m = date.getMonth() + 1;
  554. m = m < 10 ? ('0' + m) : m;
  555. var d = date.getDate();
  556. d = d < 10 ? ('0' + d) : d;
  557. var h = date.getHours();
  558. var minute = date.getMinutes();
  559. minute = minute < 10 ? ('0' + minute) : minute;
  560. return y + '-' + m + '-' + d + ' ' + h + ':' + minute;
  561. }
  562. }
  563. }
  564. </script>
  565. <style lang="scss">
  566. .el-pagination {
  567. margin: 1rem 0 2rem;
  568. text-align: right;
  569. }
  570. </style>