detailReadonly.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <template>
  2. <div class="app-container">
  3. <div class="title-container">
  4. <breadcrumb id="breadcrumb-container" class="breadcrumb-container"/>
  5. </div>
  6. <y-detail-page-layout :edit-status="false" v-loading="vLoading" element-loading-text="处理中。。。">
  7. <div style="padding-top: 30px;">
  8. <el-tabs v-model="activeName">
  9. <el-tab-pane label="项目信息" name="first">
  10. <el-form ref="postForm" :model="postForm" class="form-container">
  11. <div class="createPost-main-container">
  12. <div class="postInfo-container">
  13. <div style="margin-bottom: 30px">
  14. <h3 class="title">
  15. <div class="avatar-wrapper icon-title">基</div>
  16. <div class="icon-info">基本信息</div>
  17. </h3>
  18. </div>
  19. <el-row>
  20. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  21. <el-form-item
  22. label="项目名称:"
  23. prop="name"
  24. :rules="{required: true, message: '请输入项目名称', trigger: 'blur'}"
  25. label-width="120px"
  26. class="postInfo-container-item"
  27. >
  28. <el-input v-model="postForm.name" class="filter-item"/>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  32. <el-form-item
  33. label="事业部流水号:"
  34. prop="businessNo"
  35. :rules="{required: true, message: '请输入事业部流水号', trigger: 'blur'}"
  36. label-width="150px"
  37. class="postInfo-container-item"
  38. >
  39. <el-input v-model="postForm.businessNo" class="filter-item"/>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  43. <el-form-item
  44. label="项目编号:"
  45. prop="oaNo"
  46. :rules="{required: true, message: '项目编号', trigger: 'blur'}"
  47. label-width="150px"
  48. class="postInfo-container-item"
  49. >
  50. <el-input v-model="postForm.oaNo" class="filter-item"/>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  54. <el-form-item
  55. label="所属部门:"
  56. prop="departmentId"
  57. :rules="{required: true, message: '所属部门', trigger: 'blur'}"
  58. label-width="150px"
  59. class="postInfo-container-item"
  60. >
  61. <el-select
  62. v-model="postForm.departmentId"
  63. placeholder=""
  64. clearable
  65. filterable
  66. class="filter-item"
  67. style=" width: 100%"
  68. >
  69. <el-option
  70. v-for="item in departmentsOptions"
  71. :key="item.id"
  72. :label="item.name"
  73. :value="item.id"
  74. />
  75. </el-select>
  76. </el-form-item>
  77. </el-col>
  78. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  79. <el-form-item
  80. label="业务来源:"
  81. prop="businessSource"
  82. :rules="{required: true, message: '请输入业务来源', trigger: 'blur'}"
  83. label-width="120px"
  84. class="postInfo-container-item"
  85. >
  86. <el-input v-model="postForm.businessSource" class="filter-item"/>
  87. </el-form-item>
  88. </el-col>
  89. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  90. <el-form-item
  91. label="委托单位:"
  92. prop="clientUnit"
  93. :rules="{required: true, message: '请输入委托单位', trigger: 'blur'}"
  94. label-width="120px"
  95. class="postInfo-container-item"
  96. >
  97. <el-input v-model="postForm.clientUnit" class="filter-item"/>
  98. </el-form-item>
  99. </el-col>
  100. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  101. <el-form-item
  102. label="委托人:"
  103. prop="clientName"
  104. :rules="{required: true, message: '请输入委托人', trigger: 'blur'}"
  105. label-width="120px"
  106. class="postInfo-container-item"
  107. >
  108. <el-input v-model="postForm.clientName" class="filter-item"/>
  109. </el-form-item>
  110. </el-col>
  111. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  112. <el-form-item
  113. label="客户经理:"
  114. prop="clientManager"
  115. :rules="{required: true, message: '请输入客户经理', trigger: 'blur'}"
  116. label-width="120px"
  117. class="postInfo-container-item"
  118. >
  119. <el-input v-model="postForm.clientManager" class="filter-item"/>
  120. </el-form-item>
  121. </el-col>
  122. </el-row>
  123. <el-row>
  124. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  125. <el-form-item
  126. label="联系方式:"
  127. prop="mobile"
  128. :rules="{required: true, message: '请输入联系方式', trigger: 'blur'}"
  129. label-width="120px"
  130. class="postInfo-container-item"
  131. >
  132. <el-input v-model="postForm.mobile" class="filter-item"/>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  136. <el-form-item
  137. label="技术负责人:"
  138. prop="skiller"
  139. :rules="{required: true, message: '请输入技术负责人', trigger: 'blur'}"
  140. label-width="120px"
  141. class="postInfo-container-item"
  142. >
  143. <el-input v-model="postForm.skiller" class="filter-item"/>
  144. </el-form-item>
  145. </el-col>
  146. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  147. <el-form-item label="签订日期:" label-width="120px" class="postInfo-container-item">
  148. <el-date-picker
  149. v-model="postForm.signDate"
  150. type="date"
  151. value-format="yyyy-MM-dd"
  152. style="width: 100%"
  153. placeholder="选择日期"
  154. />
  155. </el-form-item>
  156. </el-col>
  157. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  158. <el-form-item
  159. label="付款方式:"
  160. prop="paymentMethod"
  161. :rules="{required: true, message: '请输入付款方式', trigger: 'blur'}"
  162. label-width="120px"
  163. class="postInfo-container-item"
  164. >
  165. <el-input v-model="postForm.paymentMethod" class="filter-item"/>
  166. </el-form-item>
  167. </el-col>
  168. </el-row>
  169. <el-row>
  170. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  171. <el-form-item
  172. label="合同金额:"
  173. prop="amount"
  174. :rules="{required: true, message: '请输入合同金额', trigger: 'blur'}"
  175. label-width="120px"
  176. class="postInfo-container-item"
  177. >
  178. <el-input v-model="postForm.amount" class="filter-item"/>
  179. </el-form-item>
  180. </el-col>
  181. </el-row>
  182. <div style="margin-top:20px;width:100%;height:1px;background:rgba(242,242,242,1);"/>
  183. <div style="margin-bottom: 30px">
  184. <h3 class="title">
  185. <div class="avatar-wrapper icon-title" style="background:rgba(255,175,41,1)">人</div>
  186. <div class="icon-info">人员配置</div>
  187. </h3>
  188. </div>
  189. </div>
  190. <el-transfer
  191. filterable
  192. :filter-method="filterMethod"
  193. filter-placeholder="请输入姓名"
  194. v-model="userIds"
  195. :titles="['所有员工', '所选员工']"
  196. :data="users"
  197. >
  198. </el-transfer>
  199. </div>
  200. </el-form>
  201. </el-tab-pane>
  202. </el-tabs>
  203. </div>
  204. </y-detail-page-layout>
  205. </div>
  206. </template>
  207. <script>
  208. import Breadcrumb from '@/components/Breadcrumb'
  209. import YDetailPageLayout from '@/components/YDetailPageLayout/index_detail'
  210. export default {
  211. name: 'itemDetail',
  212. components: {
  213. Breadcrumb,
  214. YDetailPageLayout
  215. },
  216. data() {
  217. return {
  218. type: 'detail',
  219. postForm: {
  220. state: '进行中',
  221. },
  222. dataId: this.$route.query.id,
  223. activeName: 'first',
  224. vLoading: false,
  225. users:[],
  226. listQuery:{},
  227. userIds: [],
  228. filterMethod(query, item) {
  229. return item.label.indexOf(query) > -1;
  230. },
  231. departmentsOptions:[],
  232. }
  233. },
  234. created() {
  235. this.getAllUser();
  236. this.getDepartment();
  237. this.getDetail();
  238. },
  239. methods: {
  240. getAllUser() {
  241. const that = this;
  242. that.$api.user.simpleAll().then(data => {
  243. if (data.code === 200) {
  244. this.users = data.data.map((item) => {
  245. return {
  246. key: item.id,
  247. label: item.name,
  248. };
  249. });
  250. } else {
  251. this.$message({
  252. type: 'error',
  253. message: data.msg
  254. })
  255. }
  256. })
  257. },
  258. getDepartment(){
  259. this.$api.department.simpleAll().then(res => {
  260. this.departmentsOptions = res.data
  261. })
  262. },
  263. getDetail() {
  264. if (this.dataId) {
  265. this.$api.item.detail(this.dataId).then(res => {
  266. this.postForm = res.data;
  267. this.userIds = res.data.userIds.map(item => {
  268. return item
  269. })
  270. });
  271. }
  272. },
  273. }
  274. }
  275. </script>
  276. <style lang="scss" scoped>
  277. </style>