basicInfoTab.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <template>
  2. <div class="basic-info-tab">
  3. <el-form
  4. ref="initiationForm"
  5. :model="formData.basicInfo"
  6. label-width="150px"
  7. class="initiation-form two-column-form"
  8. disabled
  9. >
  10. <!-- 成本监审项目名称 -->
  11. <el-form-item label="成本监审项目名称:" prop="projectName">
  12. <el-input
  13. v-model="formData.basicInfo.projectName"
  14. placeholder="请输入成本监审项目名称"
  15. style="width: 100%"
  16. ></el-input>
  17. </el-form-item>
  18. <!-- 关联成本监审目录 -->
  19. <el-form-item label="关联成本监审目录:" prop="catalogId">
  20. <CatalogCascader
  21. ref="catalogCascader"
  22. :form-item="{ placeholder: '请选择监审目录' }"
  23. style="width: 100%"
  24. :value="formData.basicInfo.catalogId"
  25. />
  26. </el-form-item>
  27. <!-- 监审地区 -->
  28. <el-form-item label="监审地区:">
  29. <RegionSelector
  30. :initial-area-code="formData.basicInfo.areaCode"
  31. :disabled="false"
  32. style="width: 100%"
  33. ></RegionSelector>
  34. </el-form-item>
  35. <!-- 被监审单位 -->
  36. <el-form-item label="被监审单位" prop="auditedUnitName">
  37. <el-select
  38. v-if="formData.basicInfo.auditedUnitId.length > 0"
  39. v-model="formData.basicInfo.auditedUnitId"
  40. placeholder="请选择单位"
  41. clearable
  42. multiple
  43. style="width: 100%"
  44. readonly
  45. >
  46. <el-option
  47. v-for="unit in unitList"
  48. :key="unit.unitId"
  49. :label="unit.unitName"
  50. :value="unit.unitId"
  51. />
  52. </el-select>
  53. <el-input
  54. v-else
  55. v-model="formData.basicInfo.auditUnitName"
  56. style="width: 100%"
  57. placeholder="请输入被监审单位"
  58. readonly
  59. />
  60. </el-form-item>
  61. <!-- 监审主体 -->
  62. <el-form-item label="监审主体:" prop="orgId">
  63. <el-select
  64. v-model="formData.basicInfo.orgId"
  65. placeholder="请选择监审主体"
  66. style="width: 100%"
  67. clearable
  68. >
  69. <el-option
  70. v-for="Org in OrgList"
  71. :key="Org.id"
  72. :label="Org.name"
  73. :value="Org.id"
  74. />
  75. </el-select>
  76. </el-form-item>
  77. <!-- 归属年度 -->
  78. <el-form-item label="归属年度:" prop="projectYear">
  79. <el-date-picker
  80. v-model="formData.basicInfo.projectYear"
  81. style="width: 100%"
  82. type="year"
  83. placeholder="请选择归属年度"
  84. format="yyyy"
  85. value-format="yyyy"
  86. clearable
  87. ></el-date-picker>
  88. </el-form-item>
  89. <!-- 立项来源 -->
  90. <el-form-item label="立项来源:" prop="sourceType">
  91. <el-select
  92. v-model="formData.basicInfo.sourceType"
  93. placeholder="请选择立项类型"
  94. style="width: 100%"
  95. >
  96. <el-option
  97. v-for="item in dictData['projectProposal']"
  98. :key="item.key"
  99. :label="item.name"
  100. :value="item.key"
  101. ></el-option>
  102. </el-select>
  103. </el-form-item>
  104. <!-- 监审形式 -->
  105. <el-form-item label="监审形式:" prop="auditType">
  106. <el-select
  107. v-model="formData.basicInfo.auditType"
  108. placeholder="请选择监审形式"
  109. style="width: 100%"
  110. >
  111. <el-option
  112. v-for="item in dictData['auditType']"
  113. :key="item.key"
  114. :label="item.name"
  115. :value="item.key"
  116. ></el-option>
  117. </el-select>
  118. </el-form-item>
  119. <!-- 监审期间 -->
  120. <el-form-item label="监审期间:" prop="auditPeriodArray">
  121. <div class="cost-period-container">
  122. <div class="cost-years-wrapper">
  123. <div
  124. v-for="(year, index) in formData.basicInfo.auditPeriodArray"
  125. :key="index"
  126. class="cost-year-item"
  127. >
  128. <el-date-picker
  129. v-model="year.value"
  130. style="width: 100%"
  131. type="year"
  132. placeholder="请选择年份"
  133. format="yyyy"
  134. value-format="yyyy"
  135. clearable
  136. ></el-date-picker>
  137. </div>
  138. </div>
  139. </div>
  140. </el-form-item>
  141. <!-- 是否参加听证 -->
  142. <el-form-item label="是否参加听证:" prop="needHearing">
  143. <el-radio-group v-model="formData.basicInfo.needHearing">
  144. <el-radio label="0">是</el-radio>
  145. <el-radio label="1">否</el-radio>
  146. </el-radio-group>
  147. </el-form-item>
  148. <!-- 是否应急项目 -->
  149. <el-form-item label="是否应急项目:" prop="isEmergency">
  150. <el-radio-group v-model="formData.basicInfo.isEmergency">
  151. <el-radio label="0">是</el-radio>
  152. <el-radio label="1">否</el-radio>
  153. </el-radio-group>
  154. </el-form-item>
  155. <!-- 立项理由 -->
  156. <el-form-item label="立项理由:" prop="establishmentReason">
  157. <el-input
  158. v-model="formData.basicInfo.establishmentReason"
  159. type="textarea"
  160. :rows="4"
  161. placeholder="请输入立项理由"
  162. style="width: 100%"
  163. ></el-input>
  164. </el-form-item>
  165. <!-- 立项依据 -->
  166. <el-form-item label="立项依据:">
  167. <UploadComponent
  168. :upload-mode="'single'"
  169. :max-size="50 * 1024 * 1024"
  170. :allowed-types="['xlsx', 'xls', 'doc', 'docx', 'pdf']"
  171. :files-list="accordingFileList"
  172. :is-disabled="true"
  173. />
  174. </el-form-item>
  175. <!-- 其他材料 -->
  176. <el-form-item label="其他材料:">
  177. <UploadComponent
  178. :upload-mode="'single'"
  179. :max-size="50 * 1024 * 1024"
  180. :allowed-types="['xlsx', 'xls', 'doc', 'docx', 'pdf']"
  181. :files-list="otherFileList"
  182. :is-disabled="true"
  183. />
  184. </el-form-item>
  185. <!-- 监审任务负责人 -->
  186. <el-form-item label="监审任务负责人:" prop="leaderId">
  187. <el-select
  188. v-model="formData.basicInfo.leaderId"
  189. placeholder="请选择负责人"
  190. style="width: 100%"
  191. >
  192. <el-option
  193. v-for="(item, index) in userList"
  194. :key="index"
  195. :label="item.fullname"
  196. :value="item.userId"
  197. ></el-option>
  198. </el-select>
  199. </el-form-item>
  200. <!-- 监审任务组成员 -->
  201. <el-form-item label="监审任务组成员:" prop="auditTeamMembers">
  202. <el-select
  203. v-model="formData.basicInfo.auditTeamMembers"
  204. placeholder="请选择成员"
  205. style="width: 100%"
  206. multiple
  207. >
  208. <el-option
  209. v-for="(item, index) in userList"
  210. :key="index"
  211. :label="item.fullname"
  212. :value="item.userId"
  213. ></el-option>
  214. </el-select>
  215. </el-form-item>
  216. <!-- 其他要求 -->
  217. <el-form-item label="其他专家:" prop="expertStr">
  218. <el-input
  219. v-model="formData.basicInfo.expertStr"
  220. placeholder="请输入其他专家"
  221. style="width: 100%"
  222. ></el-input>
  223. </el-form-item>
  224. </el-form>
  225. </div>
  226. </template>
  227. <script>
  228. import { taskMixin } from './index.js'
  229. import RegionSelector from '@/views/costAudit/projectInfo/auditProjectManage/annualReviewPlan/RegionSelector.vue'
  230. import UploadComponent from '@/components/costAudit/UploadComponent.vue'
  231. import CatalogCascader from '@/views/costAudit/projectInfo/auditProjectManage/annualReviewPlan/CatalogCascader.vue'
  232. import { getDefaultDem, getOrgListByDemId } from '@/api/annualReviewPlan'
  233. import { getAllUnitList } from '@/api/auditEntityManage'
  234. export default {
  235. name: 'BasicInfoTab',
  236. components: {
  237. RegionSelector,
  238. UploadComponent,
  239. CatalogCascader,
  240. },
  241. mixins: [taskMixin],
  242. props: {
  243. // 父组件传递的参数
  244. project: {
  245. type: Object,
  246. default: () => {},
  247. },
  248. },
  249. data() {
  250. return {
  251. // 添加其他数据源
  252. userList: [],
  253. OrgList: [],
  254. accordingFileList: [],
  255. otherFileList: [],
  256. unitList: [],
  257. }
  258. },
  259. // 添加watch监听project变化,确保项目数据更新时重新加载数据
  260. watch: {
  261. project: {
  262. handler() {
  263. if (this.project && this.project.projectId) {
  264. this.formData.basicInfo = this.project
  265. console.log(this.formData.basicInfo)
  266. this.formData.basicInfo.auditedUnitId = this.project.auditedUnitId
  267. ? this.project.auditedUnitId.split(',')
  268. : []
  269. this.formData.basicInfo.auditPeriodArray = this.project.auditPeriod
  270. .split(',')
  271. .map((year) => ({ value: year }))
  272. this.formData.basicInfo.auditTeamMembers =
  273. this.project.projectMembers.split(',')
  274. this.otherFileList = this.project.otherFileUrl
  275. ? this.project.otherFileUrl.split(',')
  276. : []
  277. this.accordingFileList = this.project.accordingFileUrl
  278. ? this.project.accordingFileUrl.split(',')
  279. : []
  280. }
  281. },
  282. deep: true,
  283. immediate: true,
  284. },
  285. },
  286. mounted() {
  287. this.getAllUnitList()
  288. this.getUser()
  289. this.getDefaultDem()
  290. },
  291. methods: {
  292. getAllUnitList() {
  293. getAllUnitList().then((res) => {
  294. this.unitList = res.value || []
  295. })
  296. },
  297. // 获取默认维度
  298. getDefaultDem() {
  299. getDefaultDem().then((res) => {
  300. if (res && res.code === 200) {
  301. const demId = res.value ? res.value.id : null
  302. if (demId) {
  303. this.getOrgListByDemId(demId)
  304. }
  305. }
  306. })
  307. },
  308. // 根据维度ID获取单位列表
  309. getOrgListByDemId(demId) {
  310. getOrgListByDemId({ demId }).then((res) => {
  311. if (res && res.code === 200) {
  312. this.OrgList = res.value || []
  313. }
  314. })
  315. },
  316. },
  317. }
  318. </script>
  319. <style lang="scss" scoped>
  320. .two-column-form {
  321. display: grid;
  322. grid-template-columns: repeat(2, 1fr);
  323. }
  324. </style>