detail.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <template>
  2. <basic-container>
  3. <div>
  4. <el-tabs v-model="activeType" :before-leave="beforeLeave">
  5. <el-tab-pane label="合同段信息" name="1">
  6. <div>
  7. <el-form :model="contractForm" :rules="contractRules" ref="contractForm" label-width="120px">
  8. <el-form-item label="项目名称">
  9. <el-input v-model="projectInfo.projectName" disabled></el-input>
  10. </el-form-item>
  11. <el-row>
  12. <el-col :span="12">
  13. <el-form-item label="合同段类型" prop="contractType">
  14. <el-select v-model="contractForm.contractType" placeholder="请选择" class="w-100p">
  15. <el-option v-for="item in contractTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. </el-col>
  19. <el-col :span="12">
  20. <el-form-item label="合同段编号" prop="contractNumber">
  21. <el-input v-model="contractForm.contractNumber"></el-input>
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. <el-row>
  26. <el-col :span="12">
  27. <el-form-item label="合同段名称" prop="contractName">
  28. <el-input v-model="contractForm.contractName"></el-input>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="12">
  32. <el-form-item label="参与方进场日期" prop="contractorJoinTime">
  33. <el-date-picker v-model="contractForm.contractorJoinTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  34. </el-form-item>
  35. </el-col>
  36. </el-row>
  37. <el-row>
  38. <el-col :span="12">
  39. <el-form-item label="计划开工日期" prop="planStartTime">
  40. <el-date-picker v-model="contractForm.planStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="12">
  44. <el-form-item label="计划完工日期" prop="planEndTime">
  45. <el-date-picker v-model="contractForm.planEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  46. </el-form-item>
  47. </el-col>
  48. </el-row>
  49. <el-row>
  50. <el-col :span="12">
  51. <el-form-item label="实际开工日期" prop="actualStartTime">
  52. <el-date-picker v-model="contractForm.actualStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="实际完工日期" prop="actualEndTime">
  57. <el-date-picker v-model="contractForm.actualEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  58. </el-form-item>
  59. </el-col>
  60. </el-row>
  61. <el-row>
  62. <el-col :span="12">
  63. <el-form-item label="业主单位名称" prop="contractorUnitName">
  64. <el-input v-model="contractForm.contractorUnitName"></el-input>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="12">
  68. <el-form-item label="合同金额" prop="contractAmount">
  69. <el-input v-model="contractForm.contractAmount">
  70. <template slot="append">万元</template>
  71. </el-input>
  72. </el-form-item>
  73. </el-col>
  74. </el-row>
  75. <el-row>
  76. <el-col :span="12">
  77. <el-form-item label="施工单位名称" prop="constructionUnitName">
  78. <el-input v-model="contractForm.constructionUnitName"></el-input>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="12">
  82. <el-form-item label="上传开工令" prop="startFileUrl">
  83. <template v-if="isBackShow">
  84. <el-link type="primary" @click="downloadFile">开工令</el-link>
  85. <el-button @click="delFile" class="mg-l-10" style="color:red" type="text" icon="el-icon-circle-close"></el-button>
  86. </template>
  87. <template v-else>
  88. <el-upload
  89. action="/api/blade-resource/oss/endpoint/put-file-attach"
  90. :on-remove="handleRemove"
  91. :limit="1" :headers=headers
  92. :on-exceed="handleExceed"
  93. :on-success="handleSuccess"
  94. :file-list="fileList">
  95. <el-button size="small" type="primary">点击上传</el-button>
  96. </el-upload>
  97. </template>
  98. </el-form-item>
  99. </el-col>
  100. </el-row>
  101. <el-row>
  102. <el-col :span="12">
  103. <el-form-item label="监理单位名称" prop="supervisionUnitName">
  104. <el-input v-model="contractForm.supervisionUnitName"></el-input>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="12">
  108. </el-col>
  109. </el-row>
  110. </el-form>
  111. <el-divider></el-divider>
  112. <el-row :gutter="20">
  113. <el-col :span="12">
  114. <div>组卷归档默认信息</div>
  115. <el-form label-width="90px">
  116. <el-row>
  117. <el-col :span="12">
  118. <el-form-item label="立卷人" prop="filer">
  119. <el-input v-model="contractForm.filer"></el-input>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="12">
  123. <el-form-item label="保管期限" prop="storagePeriod">
  124. <el-select v-model="contractForm.storagePeriod" placeholder="请选择" class="w-100p">
  125. <el-option label="10年" value="10年"></el-option>
  126. <el-option label="30年" value="30年"></el-option>
  127. <el-option label="永久" value="永久"></el-option>
  128. </el-select>
  129. </el-form-item>
  130. </el-col>
  131. </el-row>
  132. <el-row>
  133. <el-col :span="12">
  134. <el-form-item label="审核人" prop="reviewer">
  135. <el-input v-model="contractForm.reviewer"></el-input>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="12">
  139. <el-form-item label="保管密级" prop="securityLevel">
  140. <el-select v-model="contractForm.securityLevel" placeholder="请选择" class="w-100p">
  141. <el-option label="机密" value="机密"></el-option>
  142. <el-option label="绝密" value="绝密"></el-option>
  143. <el-option label="秘密" value="秘密"></el-option>
  144. <el-option label="公开" value="公开"></el-option>
  145. </el-select>
  146. </el-form-item>
  147. </el-col>
  148. </el-row>
  149. <el-row>
  150. <el-col :span="12">
  151. <el-form-item label="档案前缀" prop="prefix">
  152. <el-input v-model="contractForm.prefix"></el-input>
  153. </el-form-item>
  154. </el-col>
  155. <el-col :span="12">
  156. </el-col>
  157. </el-row>
  158. </el-form>
  159. </el-col>
  160. <el-col :span="12">
  161. <div>附加信息</div>
  162. <el-form label-width="90px">
  163. <el-form-item label="项目地址" prop="projectPlace">
  164. <!-- <el-input v-model="contractForm.projectPlace" placeholder="点击后面地图选取地址">
  165. <el-button slot="append" icon="el-icon-map-location" @click="mapDialogVisible = true"></el-button>
  166. </el-input> -->
  167. <avue-input-map :params="params" placeholder="请选择地图" v-model="flageData" ></avue-input-map>
  168. </el-form-item>
  169. <el-form-item label="起始桩号" prop="startStation">
  170. <el-input v-model="contractForm.startStation"></el-input>
  171. </el-form-item>
  172. <el-form-item label="结束桩号" prop="endStation">
  173. <el-input v-model="contractForm.endStation"></el-input>
  174. </el-form-item>
  175. </el-form>
  176. </el-col>
  177. </el-row>
  178. </div>
  179. </el-tab-pane>
  180. <el-tab-pane label="分配WBS" name="2">
  181. <div>
  182. </div>
  183. </el-tab-pane>
  184. <el-tab-pane label="分配项目人员" name="3">
  185. <div>
  186. </div>
  187. </el-tab-pane>
  188. </el-tabs>
  189. <div class="flex jc-sb">
  190. <div></div>
  191. <div>
  192. <el-button type="success" size="medium" @click="saveQuit">保存并退出</el-button>
  193. <el-button type="info" size="medium" @click="saveNext">保存并进入下一步</el-button>
  194. </div>
  195. </div>
  196. </div>
  197. </basic-container>
  198. </template>
  199. <script>
  200. import {getProjectDeatil} from "@/api/manager/projectinfo";
  201. import {submitContractInfo,getContractInfo,delFileFromUrl} from "@/api/manager/contractinfo";
  202. import {getDictionary} from "@/api/system/dict";
  203. import {remove as removeFile} from "@/api/resource/attach";
  204. import website from '@/config/website';
  205. import {Base64} from 'js-base64';
  206. import {getToken} from '@/util/auth';
  207. import {mapGetters} from "vuex";
  208. export default {
  209. data() {
  210. return {
  211. activeType:'1',
  212. pid:'',
  213. cid:'',
  214. projectInfo:{},
  215. contractTypeList:[],
  216. fileList:[],
  217. headers:{},
  218. isBackShow:false,
  219. contractForm:{},
  220. contractRules:{
  221. contractName: [
  222. { required: true, message: '请输入合同段名称', trigger: 'blur' },
  223. ],
  224. },
  225. mapDialogVisible:false,
  226. params:{
  227. zoom: 10,
  228. // zoomEnable: false,
  229. // dragEnable: false,
  230. },
  231. flageData:[],
  232. }
  233. },
  234. computed: {
  235. ...mapGetters(["userInfo"]),
  236. },
  237. created() {
  238. this.init();
  239. //console.log(this.userInfo)
  240. },
  241. methods: {
  242. init(){
  243. this.pid = this.$route.query.pid;
  244. this.cid = this.$route.query.cid;
  245. if(!this.cid){
  246. this.contractForm.pid = this.pid;
  247. }else{
  248. this.getContractInfo();
  249. }
  250. this.getContractTypeList();
  251. this.getProjectDeatil();
  252. this.setHeaders();
  253. },
  254. beforeLeave(activeName, oldActiveName){
  255. console.log(oldActiveName,'oldActiveName');
  256. console.log(this.activeType);
  257. },
  258. getProjectDeatil(){
  259. getProjectDeatil(this.pid).then((res)=>{
  260. this.projectInfo = res.data.data;
  261. })
  262. },
  263. getContractInfo(){
  264. getContractInfo(this.cid).then((res)=>{
  265. this.contractForm = res.data.data;
  266. if(this.contractForm.startFileUrl){
  267. this.isBackShow = true;
  268. }
  269. if(this.contractForm.projectPlace){
  270. this.flageData = ['','',this.contractForm.projectPlace]
  271. }
  272. })
  273. },
  274. saveQuit(){
  275. this.savecontract().then((res)=>{
  276. this.contractForm.id = res.data.data.id;
  277. this.$message({
  278. type: "success",
  279. message: "保存成功!"
  280. });
  281. this.$router.go(-1);
  282. }).catch((res)=>{
  283. console.log(res)
  284. })
  285. },
  286. saveNext(){
  287. },
  288. savecontract(){
  289. return new Promise((resolve, reject) => {
  290. this.$refs['contractForm'].validate((valid) => {
  291. if (valid) {
  292. if(this.flageData.length ==3){
  293. this.contractForm.projectPlace = this.flageData[2];
  294. }
  295. resolve(submitContractInfo(this.contractForm))
  296. }else{
  297. reject('验证失败')
  298. }
  299. })
  300. })
  301. },
  302. handleRemove(file) {
  303. //console.log(file, fileList);
  304. removeFile(file.response.data.attachId).then(()=>{
  305. this.contractForm.startFileUrl = '';
  306. })
  307. },
  308. handleExceed() {
  309. this.$message.warning(`当前限制选择 1 个文件,请先移除后,再次上传`);
  310. },
  311. handleSuccess(res){
  312. this.contractForm.startFileUrl = res.data.link;
  313. },
  314. setHeaders(){
  315. this.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
  316. this.headers[website.tokenHeader] = 'bearer ' + getToken()
  317. },
  318. downloadFile(){
  319. window.open(this.contractForm.startFileUrl);
  320. },
  321. delFile(){
  322. this.$confirm('是否删除该文件?', '删除开工令', {
  323. distinguishCancelAndClose: true,
  324. confirmButtonText: '删除',
  325. cancelButtonText: '取消'
  326. }).then(() => {
  327. delFileFromUrl(this.contractForm.startFileUrl).then(()=>{
  328. this.isBackShow = false;
  329. this.contractForm.startFileUrl = '';
  330. })
  331. })
  332. },
  333. getContractTypeList(){
  334. if(this.contractTypeList.length >1){
  335. return;
  336. }
  337. getDictionary({
  338. code:'contract_type'
  339. }).then((res)=>{
  340. res.data.data.forEach(element => {
  341. element.dictKey = Number(element.dictKey)
  342. });
  343. this.contractTypeList = res.data.data;
  344. })
  345. },
  346. }
  347. };
  348. </script>
  349. <style scoped lang="scss">
  350. .bm-view {
  351. width: 100%;
  352. height: 300px;
  353. }
  354. </style>