plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

907 lines
30 KiB

3 years ago
3 years ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
1 year ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
1 year ago
3 years ago
2 years ago
2 years ago
3 years ago
1 year ago
3 years ago
3 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
3 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
3 years ago
2 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
3 years ago
2 years ago
2 years ago
1 year ago
3 years ago
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-dialog
  4. width="40%"
  5. :title="value === 'save' ? '新增-项目' :value === 'update'?'修改-项目':'新增-子项目'"
  6. :close-on-click-modal="false"
  7. :visible.sync="visible"
  8. @close="closeSaveDialog">
  9. <el-form ref="saveForm" :model="dataForm" label-position="top" label-width="100px" :rules="projectRole">
  10. <el-row :gutter="25">
  11. <el-col :span="6">
  12. <el-form-item :label="(value !=='save' && value !== 'update')?'上级项目号':'项目号'">
  13. <el-input v-model="dataForm.projectId" disabled ></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="12">
  17. <el-form-item label="项目名称" prop="projectName">
  18. <el-input v-model="dataForm.projectName" ></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <el-form-item prop="projectTypeDb" label="项目类型">
  23. <dict-data-select dict-type="project_info_type_db" v-if="visible" v-model="dataForm.projectTypeDb"></dict-data-select>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="6">
  27. <el-form-item prop="projectSource" :rules="projectRole.projectSourceDesc" label="项目来源">
  28. <dict-data-select dict-type="project_info_source" v-if="visible" v-model="dataForm.projectSource"></dict-data-select>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="6">
  32. <el-form-item prop="priority" label="优先级">
  33. <dict-data-select dict-type="project_info_priority" v-if="visible" v-model="dataForm.priority"></dict-data-select>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="6">
  37. <el-form-item label="需求日期:" prop="needDate">
  38. <el-date-picker
  39. style="width: 100%"
  40. v-model="dataForm.needDate"
  41. type="date"
  42. value-format="yyyy-MM-dd"
  43. placeholder="选择日期">
  44. </el-date-picker>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="6">
  48. <el-form-item prop="projectManagerName" :rules="projectRole.projectManagerName">
  49. <span slot="label" style="" @click="managerChooseModal()"><a herf="#">项目经理</a></span>
  50. <el-input v-model="dataForm.projectManagerName" readonly ></el-input>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="6">
  54. <el-form-item prop="projectOwnerName" :rules="projectRole.projectOwnerName">
  55. <span slot="label" style="" @click="ownerChooseModal()"><a herf="#">项目负责人</a></span>
  56. <el-input v-model="dataForm.projectOwnerName" readonly ></el-input>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="6">
  60. <el-form-item prop="customerId">
  61. <span slot="label" style="" @click="getBaseList(102,1)"><a herf="#">直接客户</a></span>
  62. <el-input v-model="dataForm.customerId" @blur="getCustomerName(1)"></el-input>
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="12">
  66. <el-form-item prop="customerName" label="直接客户名称:">
  67. <el-input v-model="dataForm.customerName" disabled ></el-input>
  68. </el-form-item>
  69. </el-col>
  70. <el-col :span="6">
  71. <el-form-item label="终端客户">
  72. <!-- <span slot="label" style="" @click="getBaseList(102,2)"><a herf="#">终端客户</a></span>-->
  73. <!-- <el-input v-model="dataForm.finalCustomerId" @blur="getCustomerName(2)"></el-input>-->
  74. <dict-data-select v-model="dataForm.finalCustomerId" clearable dict-type="finalCustomer" :use-default-value="false"></dict-data-select>
  75. </el-form-item>
  76. </el-col>
  77. <!-- <el-col :span="12">-->
  78. <!-- <el-form-item label="终端客户名称:">-->
  79. <!-- <el-input v-model="dataForm.finalCustomerName" disabled ></el-input>-->
  80. <!-- </el-form-item>-->
  81. <!-- </el-col>-->
  82. </el-row>
  83. <el-form-item label="项目描述" style="height: 70px">
  84. <el-input type="textarea" resize="none" :autosize="{minRows: 2, maxRows: 2}" v-model="dataForm.projectDesc" ></el-input>
  85. </el-form-item>
  86. <el-form-item label="客户应用/要求" style="height: 70px">
  87. <el-input type="textarea" resize="none" :autosize="{minRows: 2, maxRows: 2}" v-model="dataForm.customerRemark" ></el-input>
  88. </el-form-item>
  89. <el-form-item label="其他要求" style="height: 70px">
  90. <el-input type="textarea" resize="none" :autosize="{minRows: 2, maxRows: 2}" v-model="dataForm.remark" ></el-input>
  91. </el-form-item>
  92. <el-form-item prop="userRoleName" :rules="projectRole.userRoleName">
  93. <span slot="label" style="" @click="userRollModal()"><a herf="#">项目权限</a></span>
  94. <el-input v-model="dataForm.userRoleName" ></el-input>
  95. </el-form-item>
  96. </el-form>
  97. <span slot="footer" class="dialog-footer">
  98. <el-button type="primary" @click="dataFormSubmit()">{{'确定'}}</el-button>
  99. <el-button type="primary" @click="visible = false">{{'关闭'}}</el-button>
  100. </span>
  101. </el-dialog>
  102. <el-dialog
  103. width="530px"
  104. title="项目经理"
  105. :close-on-click-modal="false"
  106. :visible.sync="managerFlag">
  107. <el-transfer class="rq" filterable v-model="projectManagerList" :props="{
  108. key: 'operatorId',
  109. label: 'operatorName'
  110. }" :data="operatorList" :titles="['未选择', '已选择']"></el-transfer>
  111. <span slot="footer" class="dialog-footer">
  112. <div style="margin-top: 5px">
  113. <el-button type="primary" @click="saveManagerList()">确定</el-button>
  114. <el-button @click="managerFlag = false" type="primary">取消</el-button>
  115. </div>
  116. </span>
  117. </el-dialog>
  118. <el-dialog
  119. width="530px"
  120. title="项目负责人"
  121. :close-on-click-modal="false"
  122. :visible.sync="ownerFlag">
  123. <el-transfer class="rq" filterable v-model="projectOwnerList" :props="{
  124. key: 'operatorId',
  125. label: 'operatorName'
  126. }" :data="operatorList" :titles="['未选择', '已选择']"></el-transfer>
  127. <span slot="footer" class="dialog-footer">
  128. <div style="margin-top: 5px">
  129. <el-button type="primary" @click="saveOwnerList()">确定</el-button>
  130. <el-button @click="ownerFlag = false" type="primary">取消</el-button>
  131. </div>
  132. </span>
  133. </el-dialog>
  134. <el-dialog
  135. width="530px"
  136. title="权限"
  137. :close-on-click-modal="false"
  138. :visible.sync="userRoleFlag">
  139. <el-form :inline="true" :model="userRoleForm" label-position="top">
  140. <el-form-item label="账号">
  141. <el-input v-model="userRoleForm.username" placeholder=" "></el-input>
  142. </el-form-item>
  143. <el-form-item label="姓名">
  144. <el-input v-model="userRoleForm.userDisplay" placeholder=" "></el-input>
  145. </el-form-item>
  146. <el-form-item label=" ">
  147. <el-button type="primary" @click="searchUserRoll()">查询</el-button>
  148. </el-form-item>
  149. </el-form>
  150. <el-table
  151. :data="userRoleList"
  152. border
  153. :height="300"
  154. v-loading="false"
  155. style="width: 100%;">
  156. <el-table-column
  157. prop="username"
  158. header-align="center"
  159. align="center"
  160. min-width="35"
  161. label="账号">
  162. </el-table-column>
  163. <el-table-column
  164. prop="userDisplay"
  165. header-align="center"
  166. align="center"
  167. min-width="35"
  168. label="姓名">
  169. </el-table-column>
  170. <el-table-column
  171. prop=""
  172. header-align="center"
  173. align="center"
  174. min-width="30"
  175. label="">
  176. <template slot="header" slot-scope="scope">
  177. <el-checkbox :indeterminate="saveCheckAllIndeterminate" v-model="saveCheckAll" true-label="Y" false-label="N" @change="changeSaveCheckAll"></el-checkbox>
  178. </template>
  179. <template slot-scope="scope">
  180. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  181. <el-checkbox :indeterminate="userRoleIndeterminateList[scope.$index]" v-model="scope.row.checkAll" @change="changeAll(scope.row)"></el-checkbox>
  182. </template>
  183. </el-table-column>
  184. <el-table-column
  185. prop=""
  186. header-align="center"
  187. align="center"
  188. min-width="30"
  189. label="查询">
  190. <template slot-scope="scope">
  191. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  192. <el-checkbox v-model="scope.row.searchCheck" @change="changeCheck(scope.row,1)"></el-checkbox>
  193. </template>
  194. </el-table-column>
  195. <el-table-column
  196. prop=""
  197. header-align="center"
  198. align="center"
  199. min-width="30"
  200. label="修改">
  201. <template slot-scope="scope">
  202. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  203. <el-checkbox v-model="scope.row.updateCheck" @change="changeCheck(scope.row,2)"></el-checkbox>
  204. </template>
  205. </el-table-column>
  206. <el-table-column
  207. prop=""
  208. header-align="center"
  209. align="center"
  210. min-width="30"
  211. label="下载">
  212. <template slot-scope="scope">
  213. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  214. <el-checkbox v-model="scope.row.downCheck" @change="changeCheck(scope.row,3)"></el-checkbox>
  215. </template>
  216. </el-table-column>
  217. <el-table-column
  218. prop=""
  219. header-align="center"
  220. align="center"
  221. min-width="30"
  222. label="删除">
  223. <template slot-scope="scope">
  224. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  225. <el-checkbox v-model="scope.row.deleteCheck" @change="changeCheck(scope.row,4)"></el-checkbox>
  226. </template>
  227. </el-table-column>
  228. </el-table>
  229. <span slot="footer" class="dialog-footer">
  230. <div style="margin-top: 5px">
  231. <el-button type="primary" @click="saveUserList()">确定</el-button>
  232. <el-button @click="userRoleFlag = false" type="primary">取消</el-button>
  233. </div>
  234. </span>
  235. </el-dialog>
  236. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  237. </div>
  238. </template>
  239. <script>
  240. import {projectInfoSearch,
  241. searchOperatorWithSite,
  242. searchProjectTeamStr,
  243. searchUserRoll,
  244. saveProjectInfo,
  245. } from "@/api/project/project.js"
  246. import Chooselist from '@/views/modules/common/Chooselist'
  247. import DictDataSelect from "../../sys/dict-data-select.vue";
  248. import {queryCustomer
  249. } from "@/api/customer/customerInformation";
  250. export default {
  251. model:{
  252. prop:'value',
  253. event:'change',
  254. },
  255. props:{
  256. value:{
  257. required:true,
  258. type:String,
  259. }
  260. },
  261. components: {
  262. DictDataSelect,
  263. Chooselist
  264. },
  265. data () {
  266. return {
  267. tagNo:'',
  268. tagNo1:'',
  269. visible: false,
  270. treeVisible: false,
  271. managerFlag:false,
  272. userRoleFlag:false,
  273. ownerFlag:false,
  274. operatorList:[],
  275. dataForm: {
  276. id: 0,
  277. site:this.$store.state.user.site,
  278. projectLevel:1,
  279. projectId:'',
  280. projectTypeDb:'',
  281. projectType:'',
  282. customerName:'',
  283. finalCustomerName:'',
  284. customerId:'',
  285. finalCustomerId:'',
  286. projectName:'',
  287. projectDesc:'',
  288. needDate:'',
  289. priority:'',
  290. projectSource:'',
  291. priorityDesc:'',
  292. projectSourceDesc:'',
  293. projectManagerName:'',
  294. projectOwnerName:'',
  295. customerRemark:'',
  296. remark:'',
  297. userRoleName:'',
  298. projectManagerList:[],
  299. projectOwnerList:[],
  300. userRoleList:[],
  301. },
  302. userRoleForm:{
  303. username:'',
  304. userDisplay:'',
  305. },
  306. projectManagerList:[],
  307. projectOwnerList:[],
  308. userRoleList:[],
  309. projectRole: {
  310. projectLevel: [
  311. {
  312. required: true,
  313. message: ' ',
  314. trigger: ['change','blur']
  315. }
  316. ],
  317. customerName: [
  318. {
  319. required: true,
  320. message: ' ',
  321. trigger: ['change','blur']
  322. }
  323. ],
  324. projectName: [
  325. {
  326. required: true,
  327. message: ' ',
  328. trigger: ['change','blur']
  329. }
  330. ],
  331. customerId: [
  332. {
  333. required: true,
  334. message: ' ',
  335. trigger: ['change','blur']
  336. }
  337. ],
  338. needDate: [
  339. {
  340. required: true,
  341. message: ' ',
  342. trigger: ['change','blur']
  343. }
  344. ],
  345. projectManagerName: [
  346. {
  347. required: true,
  348. message: ' ',
  349. trigger: 'change'
  350. }
  351. ],
  352. projectOwnerName: [
  353. {
  354. required: true,
  355. message: ' ',
  356. trigger: 'change'
  357. }
  358. ],
  359. userRoleName: [
  360. {
  361. required: true,
  362. message: ' ',
  363. trigger: 'change'
  364. }
  365. ],
  366. },
  367. saveCheckAll:'N',
  368. }
  369. },
  370. created () {
  371. },
  372. watch:{
  373. userRoleFlag(newVal,oldVal){
  374. if (newVal === false){
  375. this.userRoleForm.username = ''
  376. this.userRoleForm.userDisplay = ''
  377. // this.saveCheckAll='N'
  378. }
  379. },
  380. },
  381. computed:{
  382. saveCheckAllIndeterminate(){
  383. if (this.userRoleList.every(item => item.checkAll === true)){
  384. this.saveCheckAll = 'Y'
  385. return false
  386. }else if (this.userRoleList.every(item => item.checkAll === false)){
  387. this.saveCheckAll = 'N'
  388. return false
  389. }else {
  390. this.saveCheckAll = 'N'
  391. return true
  392. }
  393. },
  394. userRoleIndeterminateList(){
  395. return this.userRoleList.map(item=>{
  396. if (item.checkAll === true){
  397. return false
  398. }else {
  399. return !(item.searchCheck === false && item.updateCheck === false && item.downCheck === false && item.deleteCheck === false);
  400. }
  401. })
  402. },
  403. },
  404. methods: {
  405. // 获取基础数据列表S
  406. getBaseList (val, type) {
  407. this.tagNo = val
  408. this.tagNo1 = type
  409. this.$nextTick(() => {
  410. let strVal = ''
  411. if (val === 1010) {
  412. if(type==1) {
  413. strVal = this.dataForm.projectTypeDb
  414. }
  415. }
  416. if (val === 106) {
  417. if(type==1) {
  418. strVal = this.dataForm.buNo
  419. }
  420. }
  421. if (val === 102) {
  422. if(type==1) {
  423. strVal = this.dataForm.customerId
  424. }
  425. if(type==2) {
  426. strVal = this.dataForm.finalCustomerId
  427. }
  428. }
  429. if (val === 1011) {
  430. if(type==1) {
  431. strVal = this.dataForm.projectSource
  432. }
  433. }
  434. if (val === 1012) {
  435. if(type==1) {
  436. strVal = this.dataForm.priority
  437. }
  438. }
  439. this.$refs.baseList.init(val, strVal)
  440. })
  441. },
  442. /* 列表方法的回调 */
  443. getBaseData (val) {
  444. if (this.tagNo === 1010) {
  445. if(this.tagNo1==1) {
  446. this.dataForm.projectTypeDb = val.Base_id
  447. this.dataForm.projectType = val.Base_desc
  448. }
  449. }
  450. if (this.tagNo === 102) {
  451. if(this.tagNo1==1) {
  452. this.dataForm.customerId = val.Customer_no
  453. this.dataForm.customerName = val.Customer_desc
  454. }
  455. if(this.tagNo1==2) {
  456. this.dataForm.finalCustomerId = val.Customer_no
  457. this.dataForm.finalCustomerName = val.Customer_desc
  458. }
  459. }
  460. if (this.tagNo === 1011) {
  461. if(this.tagNo1==1) {
  462. this.dataForm.projectSource = val.Base_id
  463. this.dataForm.projectSourceDesc = val.Base_desc
  464. }
  465. }
  466. if (this.tagNo === 1012) {
  467. if(this.tagNo1==1) {
  468. this.dataForm.priority = val.Base_id
  469. this.dataForm.priorityDesc = val.Base_desc
  470. }
  471. }
  472. if (this.tagNo === 106) {
  473. if(this.tagNo1==1) {
  474. this.dataForm.buNo = val.Bu_no
  475. this.dataForm.buDesc = val.Bu_desc
  476. }
  477. }
  478. },
  479. init (id) {
  480. this.dataForm.id = id || 0
  481. let requestCustomer = null;
  482. if (this.dataForm.customerId){
  483. requestCustomer = JSON.parse(JSON.stringify(this.dataForm))
  484. }
  485. if(this.dataForm.id!=0){
  486. let inData={
  487. page: 1,
  488. limit: 10,
  489. id:id
  490. }
  491. projectInfoSearch(inData).then(({data}) => {
  492. if(data.page.list.length>0){
  493. this.dataForm= data.page.list[0];
  494. let inData={
  495. site:this.dataForm.site,
  496. projectId:this.dataForm.projectId,
  497. type:'manager',
  498. }
  499. searchProjectTeamStr(inData).then(({data}) => {
  500. this.dataForm.projectManagerList=data.rows
  501. })
  502. let inData2={
  503. site:this.dataForm.site,
  504. projectId:this.dataForm.projectId,
  505. type:'owner',
  506. }
  507. searchProjectTeamStr(inData2).then(({data}) => {
  508. this.dataForm.projectOwnerList=data.rows
  509. })
  510. this.searchUserRollAll();
  511. }
  512. })
  513. }else {
  514. this.dataForm={
  515. id: 0,
  516. site:this.$store.state.user.site,
  517. projectLevel:1,
  518. projectId:'',
  519. projectTypeDb:'',
  520. projectType:'',
  521. customerName:'',
  522. customerId:'',
  523. projectName:'',
  524. projectDesc:'',
  525. needDate:'',
  526. priority:'',
  527. projectSource:'',
  528. priorityDesc:'',
  529. projectSourceDesc:'',
  530. projectManagerName:'',
  531. projectOwnerName:'',
  532. customerRemark:'',
  533. remark:'',
  534. userRoleName:'',
  535. projectManagerList:[],
  536. projectOwnerList:[],
  537. buNo:'',
  538. buDesc:'',
  539. finalCustomerId:'',
  540. finalCustomerName:'',
  541. }
  542. this.searchUserRollAll();
  543. }
  544. if (requestCustomer){
  545. this.initCustomer(requestCustomer)
  546. }
  547. this.visible = true
  548. },
  549. searchUserRoll(){
  550. let inData3={
  551. site:this.dataForm.site,
  552. projectId:this.dataForm.projectId,
  553. username:this.userRoleForm.username,
  554. userDisplay:this.userRoleForm.userDisplay,
  555. }
  556. searchUserRoll(inData3).then(({data}) => {
  557. this.userRoleList=data.rows;
  558. // this.userRollModal();
  559. })
  560. },
  561. searchUserRollAll(){
  562. let inData3={
  563. site:this.dataForm.site,
  564. projectId:this.dataForm.projectId,
  565. }
  566. searchUserRoll(inData3).then(({data}) => {
  567. this.dataForm.userRoleList=data.rows;
  568. // this.userRollModal();
  569. })
  570. },
  571. managerChooseModal(){
  572. let inData={
  573. site:this.dataForm.site,
  574. projectId:this.dataForm.projectId,
  575. }
  576. searchOperatorWithSite(inData).then(({data}) => {
  577. this.operatorList=data.rows
  578. })
  579. this.projectManagerList = JSON.parse(JSON.stringify(this.dataForm.projectManagerList));
  580. this.managerFlag=true
  581. },
  582. saveManagerList(){
  583. let projectManagerName='';
  584. for (let i = 0; i < this.projectManagerList.length; i++) {
  585. let select= this.operatorList.filter(item => item.operatorId === this.projectManagerList[i])
  586. if(select.length>0){
  587. projectManagerName+=select[0].operatorName+';'
  588. }
  589. }
  590. this.dataForm.projectManagerName=projectManagerName
  591. this.dataForm.projectManagerList=JSON.parse(JSON.stringify(this.projectManagerList));
  592. this.managerFlag=false
  593. },
  594. ownerChooseModal(){
  595. let inData={
  596. site:this.dataForm.site,
  597. projectId:this.dataForm.projectId,
  598. }
  599. searchOperatorWithSite(inData).then(({data}) => {
  600. this.operatorList=data.rows
  601. })
  602. this.projectOwnerList = JSON.parse(JSON.stringify(this.dataForm.projectOwnerList));
  603. this.ownerFlag=true
  604. },
  605. saveOwnerList(){
  606. let projectOwnerName='';
  607. for (let i = 0; i < this.projectOwnerList.length; i++) {
  608. let select= this.operatorList.filter(item => item.operatorId === this.projectOwnerList[i])
  609. if(select.length>0){
  610. projectOwnerName+=select[0].operatorName+';'
  611. }
  612. }
  613. this.dataForm.projectOwnerName=projectOwnerName
  614. this.dataForm.projectOwnerList=JSON.parse(JSON.stringify(this.projectOwnerList));
  615. this.ownerFlag=false
  616. },
  617. userRollModal(){
  618. // this.userRoleList=JSON.parse(JSON.stringify(this.dataForm.userRoleList));
  619. this.searchUserRoll()
  620. for (let i = 0; i <this.userRoleList.length ; i++) {
  621. if(this.userRoleList[i].username===this.$store.state.user.name){
  622. this.userRoleList[i].checkAll=true;
  623. this.changeAll(this.userRoleList[i])
  624. }
  625. }
  626. this.userRoleFlag=true
  627. },
  628. saveUserList(){
  629. for (let i = 0; i <this.userRoleList.length ; i++) {
  630. if(this.userRoleList[i].username==this.$store.state.user.name){
  631. this.userRoleList[i].searchCheck=true;
  632. this.userRoleList[i].updateCheck=true;
  633. this.userRoleList[i].downCheck=true;
  634. this.userRoleList[i].deleteCheck=true;
  635. this.userRoleList[i].searchFlag='Y'
  636. this.userRoleList[i].updateFlag='Y'
  637. this.userRoleList[i].downFlag='Y'
  638. this.userRoleList[i].deleteFlag='Y'
  639. }
  640. }
  641. let name= '';
  642. for (let i = 0; i < this.userRoleList.length; i++) {
  643. this.dataForm.userRoleList=this.dataForm.userRoleList.filter(item => item.username != this.userRoleList[i].username)
  644. if(this.userRoleList[i].searchCheck||this.userRoleList[i].updateCheck||this.userRoleList[i].downCheck||this.userRoleList[i].deleteCheck){
  645. this.dataForm.userRoleList.push(this.userRoleList[i])
  646. }
  647. }
  648. for (let i = 0; i < this.dataForm.userRoleList.length; i++) {
  649. if(this.dataForm.userRoleList[i].searchCheck||this.dataForm.userRoleList[i].updateCheck
  650. ||this.dataForm.userRoleList[i].downCheck||this.dataForm.userRoleList[i].deleteCheck){
  651. name+=this.dataForm.userRoleList[i].userDisplay+';'
  652. }
  653. }
  654. this.dataForm.userRoleName=name
  655. // this.dataForm.userRoleList=JSON.parse(JSON.stringify(this.userRoleList));
  656. this.userRoleFlag=false
  657. },
  658. changeAll(row){
  659. if(row.checkAll){
  660. row.searchCheck=true;
  661. row.updateCheck=true;
  662. row.downCheck=true;
  663. row.deleteCheck=true;
  664. row.searchFlag='Y'
  665. row.updateFlag='Y'
  666. row.downFlag='Y'
  667. row.deleteFlag='Y'
  668. }else {
  669. row.searchCheck=false;
  670. row.updateCheck=false;
  671. row.downCheck=false;
  672. row.deleteCheck=false;
  673. row.searchFlag='N'
  674. row.updateFlag='N'
  675. row.downFlag='N'
  676. row.deleteFlag='N'
  677. }
  678. },
  679. changeCheck(row,type){
  680. if(type==1){
  681. if(row.searchCheck){
  682. row.searchFlag='Y'
  683. }else {
  684. row.searchFlag='N'
  685. }
  686. }
  687. if(type==2){
  688. if(row.updateCheck){
  689. row.updateFlag='Y'
  690. }else {
  691. row.updateFlag='N'
  692. }
  693. }
  694. if(type==3){
  695. if(row.downCheck){
  696. row.downFlag='Y'
  697. }else {
  698. row.downFlag='N'
  699. }
  700. }
  701. if(type==4){
  702. if(row.deleteCheck){
  703. row.deleteFlag='Y'
  704. }else {
  705. row.deleteFlag='N'
  706. }
  707. }
  708. if(row.searchCheck && row.updateCheck && row.downCheck && row.deleteCheck){
  709. row.checkAll=true
  710. }else{
  711. row.checkAll=false
  712. }
  713. this.$forceUpdate();
  714. },
  715. // 表单提交
  716. dataFormSubmit () {
  717. this.$refs.saveForm.validate((validate)=>{
  718. if (validate){
  719. this.dataForm.updateBy = this.$store.state.user.name
  720. console.log(this.dataForm)
  721. saveProjectInfo(this.dataForm).then(({data}) => {
  722. if (data && data.code === 0) {
  723. this.$message.success( '操作成功')
  724. this.visible = false
  725. this.$emit('refreshDataList')
  726. } else {
  727. this.$message.error(data.msg)
  728. }
  729. })
  730. }else {
  731. // if(!this.dataForm.projectTypeDb){
  732. // this.$alert('请选择项目类型!', '错误', {
  733. // confirmButtonText: '确定'
  734. // })
  735. // return false;
  736. // }
  737. if(!this.dataForm.customerId){
  738. this.$alert('请选择直接客户!', '错误', {
  739. confirmButtonText: '确定'
  740. })
  741. return false;
  742. }
  743. if(!this.dataForm.projectName){
  744. this.$alert('请输入项目名称!', '错误', {
  745. confirmButtonText: '确定'
  746. })
  747. return false;
  748. }
  749. // if(!this.dataForm.projectSource){
  750. // this.$alert('请选择项目来源!', '错误', {
  751. // confirmButtonText: '确定'
  752. // })
  753. // return false;
  754. // }
  755. // if(!this.dataForm.buDesc){
  756. // this.$alert('请选择BU!', '错误', {
  757. // confirmButtonText: '确定'
  758. // })
  759. // return false;
  760. // }
  761. // if(!this.dataForm.priority){
  762. // this.$alert('请选择优先级!', '错误', {
  763. // confirmButtonText: '确定'
  764. // })
  765. // return false;
  766. // }
  767. if(!this.dataForm.needDate){
  768. this.$alert('请选择需求日期!', '错误', {
  769. confirmButtonText: '确定'
  770. })
  771. return false;
  772. }
  773. if(!this.dataForm.projectManagerName){
  774. this.$alert('请选择项目经理!', '错误', {
  775. confirmButtonText: '确定'
  776. })
  777. return false;
  778. }
  779. if(!this.dataForm.projectOwnerName){
  780. this.$alert('请选择项目负责人!', '错误', {
  781. confirmButtonText: '确定'
  782. })
  783. return false;
  784. }
  785. if(!this.dataForm.userRoleName){
  786. this.$alert('请选择权限!', '错误', {
  787. confirmButtonText: '确定'
  788. })
  789. return false;
  790. }
  791. }
  792. })
  793. },
  794. closeSaveDialog(){
  795. this.$refs.saveForm.resetFields();
  796. },
  797. updateDataForm(val){
  798. this.dataForm.projectId = val;
  799. },
  800. initCustomer(row){
  801. this.dataForm.customerId = row.customerId;
  802. this.dataForm.customerName = row.customerName;
  803. },
  804. changeSaveCheckAll(val){
  805. for (let i = 0; i < this.userRoleList.length; i++) {
  806. let row = this.userRoleList[i]
  807. row.checkAll = (val === 'Y')
  808. this.changeAll(row)
  809. }
  810. },
  811. getCustomerName(type){
  812. if(type===1){
  813. let params = {
  814. site:this.$store.state.user.site,
  815. customerNo:this.dataForm.customerId
  816. }
  817. queryCustomer(params).then(({data})=>{
  818. if (data && data.code === 0 ) {
  819. if (data.rows && data.rows.length === 1){
  820. this.dataForm.customerName = data.rows[0].customerDesc
  821. }else {
  822. this.dataForm.customerName = ''
  823. }
  824. }else {
  825. this.$message.warning(data.msg)
  826. }
  827. }).catch((error)=>{
  828. this.$message.error(error)
  829. })
  830. }
  831. if(type===2){
  832. let params = {
  833. site:this.$store.state.user.site,
  834. customerNo:this.dataForm.finalCustomerId
  835. }
  836. queryCustomer(params).then(({data})=>{
  837. if (data && data.code === 0 ) {
  838. if (data.rows && data.rows.length === 1){
  839. this.dataForm.finalCustomerName = data.rows[0].customerDesc
  840. }else {
  841. this.dataForm.finalCustomerName = ''
  842. }
  843. }else {
  844. this.$message.warning(data.msg)
  845. }
  846. }).catch((error)=>{
  847. this.$message.error(error)
  848. })
  849. }
  850. },
  851. },
  852. }
  853. </script>
  854. <style >
  855. .el-transfer-panel {
  856. border: 2px solid #17b3a3;
  857. border-radius: 4px;
  858. overflow: hidden;
  859. background: #fff;
  860. display: inline-block;
  861. vertical-align: middle;
  862. width: 200px;
  863. max-height: 100%;
  864. -webkit-box-sizing: border-box;
  865. box-sizing: border-box;
  866. position: relative;
  867. }
  868. .el-transfer-panel .el-transfer-panel__header {
  869. height: 40px;
  870. line-height: 40px;
  871. background: #17b3a3;
  872. margin: 0;
  873. padding-left: 15px;
  874. border-bottom: 1px solid #17b3a3;
  875. -webkit-box-sizing: border-box;
  876. box-sizing: border-box;
  877. color: #000;
  878. }
  879. .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
  880. font-size: 14px;
  881. color: #303133;
  882. font-weight: 400;
  883. }
  884. .el-textarea .el-textarea__inner {
  885. padding: 0px 5px;
  886. height: auto;
  887. }
  888. </style>