ProjectInfoTab.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <template>
  2. <el-form :model="localFormData" label-width="180px" :disabled="true">
  3. <el-form-item label="成本监审项目名称:">
  4. <el-input
  5. v-model="localFormData.projectName"
  6. placeholder="请输入成本监审项目名称"
  7. style="width: 400px"
  8. :disabled="isViewMode"
  9. ></el-input>
  10. </el-form-item>
  11. <el-form-item label="关联成本监审目录:">
  12. <CatalogCascader
  13. ref="catalogCascader"
  14. :form-item="{ placeholder: '请选择监审目录' }"
  15. style="width: 100%"
  16. :value="localFormData.catalogId"
  17. :disabled="isViewMode"
  18. @change="$emit('catalog-change', $event)"
  19. />
  20. </el-form-item>
  21. <el-form-item label="监审地区:">
  22. <RegionSelector
  23. :initial-area-code="localFormData.areaCode"
  24. :disabled="isViewMode"
  25. @region-change="$emit('region-change', $event)"
  26. ></RegionSelector>
  27. </el-form-item>
  28. <el-form-item label="被监审单位:">
  29. <el-select
  30. v-if="localFormData.auditUnitId"
  31. v-model="localFormData.auditUnitId"
  32. placeholder="请选择单位"
  33. clearable
  34. multiple
  35. style="width: 100%"
  36. :disabled="isViewMode"
  37. >
  38. <el-option
  39. v-for="unit in unitList"
  40. :key="unit.unitId"
  41. :label="unit.unitName"
  42. :value="unit.unitId"
  43. />
  44. </el-select>
  45. <el-input
  46. v-else
  47. v-model="localFormData.auditUnitName"
  48. placeholder="请输入单位"
  49. style="width: 100%"
  50. :disabled="isViewMode"
  51. ></el-input>
  52. </el-form-item>
  53. <el-form-item label="监审主体:">
  54. <el-select
  55. v-model="localFormData.orgId"
  56. placeholder="请选择监审主体"
  57. style="width: 100%"
  58. clearable
  59. :disabled="isViewMode"
  60. >
  61. <el-option
  62. v-for="Org in OrgList"
  63. :key="Org.id"
  64. :label="Org.name"
  65. :value="Org.id"
  66. />
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="归属年度:">
  70. <el-date-picker
  71. v-model="localFormData.projectYear"
  72. style="width: 100%"
  73. type="year"
  74. placeholder="请选择归属年度"
  75. format="yyyy"
  76. value-format="yyyy"
  77. clearable
  78. :disabled="isViewMode"
  79. ></el-date-picker>
  80. </el-form-item>
  81. <el-form-item label="立项来源:">
  82. <el-select
  83. v-model="localFormData.sourceType"
  84. placeholder="请选择立项类型"
  85. style="width: 100%"
  86. :disabled="isViewMode"
  87. >
  88. <el-option
  89. v-for="item in dictData['projectProposal']"
  90. :key="item.key"
  91. :label="item.name"
  92. :value="item.key"
  93. ></el-option>
  94. </el-select>
  95. </el-form-item>
  96. <el-form-item label="监审形式:">
  97. <el-select
  98. v-model="localFormData.auditType"
  99. placeholder="请选择监审形式"
  100. style="width: 100%"
  101. :disabled="isViewMode"
  102. >
  103. <el-option
  104. v-for="item in dictData['auditType']"
  105. :key="item.key"
  106. :label="item.name"
  107. :value="item.key"
  108. ></el-option>
  109. </el-select>
  110. </el-form-item>
  111. <el-form-item label="监审期间:">
  112. <div class="cost-period-container">
  113. <el-button
  114. type="primary"
  115. size="small"
  116. class="add-cost-year-btn"
  117. :disabled="isViewMode || true"
  118. @click="$emit('add-cost-year')"
  119. >
  120. +
  121. </el-button>
  122. <div class="cost-years-wrapper">
  123. <div
  124. v-for="(year, index) in localFormData.auditPeriodArray"
  125. :key="index"
  126. class="cost-year-item"
  127. >
  128. <el-date-picker
  129. v-model="year.value"
  130. style="width: 82%"
  131. type="year"
  132. placeholder="请选择年份"
  133. format="yyyy"
  134. value-format="yyyy"
  135. clearable
  136. :disabled="isViewMode"
  137. ></el-date-picker>
  138. <el-button
  139. type="danger"
  140. size="small"
  141. class="delete-cost-year-btn"
  142. :disabled="isViewMode || true"
  143. @click="$emit('delete-cost-year', index)"
  144. >
  145. 删除
  146. </el-button>
  147. </div>
  148. </div>
  149. </div>
  150. </el-form-item>
  151. <el-form-item label="是否参加听证:">
  152. <el-radio-group
  153. v-model="localFormData.needHearing"
  154. :disabled="isViewMode"
  155. >
  156. <el-radio :label="0">是</el-radio>
  157. <el-radio :label="1">否</el-radio>
  158. </el-radio-group>
  159. </el-form-item>
  160. <el-form-item label="是否应急项目:">
  161. <el-radio-group
  162. v-model="localFormData.isEmergency"
  163. :disabled="isViewMode"
  164. >
  165. <el-radio :label="0">是</el-radio>
  166. <el-radio :label="1">否</el-radio>
  167. </el-radio-group>
  168. </el-form-item>
  169. <el-form-item label="立项理由:">
  170. <el-input
  171. v-model="localFormData.establishmentReason"
  172. style="width: 100%"
  173. type="textarea"
  174. rows="4"
  175. placeholder="请输入立项理由"
  176. :disabled="isViewMode"
  177. ></el-input>
  178. </el-form-item>
  179. <el-form-item label="监审任务负责人:">
  180. <el-select
  181. v-model="localFormData.auditGroup"
  182. placeholder="请选择负责人"
  183. style="width: 100%"
  184. :disabled="isViewMode"
  185. >
  186. <el-option
  187. v-for="(item, index) in userList"
  188. :key="index"
  189. :label="item.fullname"
  190. :value="item.userId"
  191. ></el-option>
  192. </el-select>
  193. </el-form-item>
  194. <el-form-item label="监审任务组成员:">
  195. <el-select
  196. v-model="localFormData.auditTeamMembers"
  197. placeholder="请选择成员"
  198. multiple
  199. style="width: 100%"
  200. :disabled="isViewMode"
  201. >
  202. <el-option
  203. v-for="(item, index) in userList"
  204. :key="index"
  205. :label="item.fullname"
  206. :value="item.userId"
  207. ></el-option>
  208. </el-select>
  209. </el-form-item>
  210. <el-form-item label="其他专家:">
  211. <el-input
  212. v-model="localFormData.expertStr"
  213. placeholder="请输入其他专家"
  214. style="width: 100%"
  215. :disabled="isViewMode"
  216. ></el-input>
  217. </el-form-item>
  218. <el-form-item label="预定的监审工作起止时间:">
  219. <el-date-picker
  220. v-model="localFormData.plannedAuditStartDate"
  221. type="date"
  222. placeholder="开始日期"
  223. format="yyyy-MM-dd"
  224. value-format="yyyy-MM-dd"
  225. style="width: 150px"
  226. :disabled="isViewMode"
  227. ></el-date-picker>
  228. <span style="margin: 0 10px">—</span>
  229. <el-date-picker
  230. v-model="localFormData.plannedAuditEndDate"
  231. type="date"
  232. placeholder="结束日期"
  233. format="yyyy-MM-dd"
  234. value-format="yyyy-MM-dd"
  235. style="width: 150px"
  236. :disabled="isViewMode"
  237. ></el-date-picker>
  238. </el-form-item>
  239. </el-form>
  240. </template>
  241. <script>
  242. export default {
  243. name: 'ProjectInfoTab',
  244. components: {
  245. CatalogCascader: () =>
  246. import(
  247. '@/views/costAudit/projectInfo/auditProjectManage/annualReviewPlan/CatalogCascader'
  248. ),
  249. RegionSelector: () =>
  250. import(
  251. '@/views/costAudit/projectInfo/auditProjectManage/annualReviewPlan/RegionSelector'
  252. ),
  253. },
  254. props: {
  255. formData: {
  256. type: Object,
  257. required: true,
  258. },
  259. isViewMode: {
  260. type: Boolean,
  261. default: false,
  262. },
  263. unitList: {
  264. type: Array,
  265. default: () => [],
  266. },
  267. OrgList: {
  268. type: Array,
  269. default: () => [],
  270. },
  271. userList: {
  272. type: Array,
  273. default: () => [],
  274. },
  275. dictData: {
  276. type: Object,
  277. default: () => ({}),
  278. },
  279. },
  280. data() {
  281. return {
  282. localFormData: {},
  283. isInternalUpdate: false, // 标记是否是内部更新(避免watch循环触发)
  284. }
  285. },
  286. watch: {
  287. formData: {
  288. handler(newVal) {
  289. // 标记为内部更新,避免触发 localFormData 的 watch
  290. this.isInternalUpdate = true
  291. // 深拷贝 formData
  292. this.localFormData = JSON.parse(JSON.stringify(newVal))
  293. this.$nextTick(() => {
  294. this.isInternalUpdate = false
  295. })
  296. },
  297. immediate: true,
  298. deep: true,
  299. },
  300. localFormData: {
  301. handler(newVal) {
  302. // 只有在非内部更新时才触发事件
  303. if (!this.isInternalUpdate) {
  304. this.$emit('change', { ...newVal })
  305. }
  306. },
  307. deep: true,
  308. },
  309. },
  310. }
  311. </script>