index.vue 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px"
  4. @submit.native.prevent>
  5. <el-form-item label="项目名称" prop="projectName">
  6. <el-input
  7. v-model="queryParams.projectName"
  8. placeholder="请输入项目名称"
  9. clearable
  10. size="small"
  11. @keyup.enter.native="handleQuery"
  12. />
  13. </el-form-item>
  14. <el-form-item label="属地辖区" prop="territoriality">
  15. <el-select v-model="queryParams.territoriality" placeholder="请选择属地辖区" clearable size="small">
  16. <el-option
  17. v-for="item in options"
  18. :key="item.value"
  19. :label="item.label"
  20. :value="item.value"
  21. />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="所属开发区" prop="park">
  25. <el-select v-model="queryParams.park" placeholder="请选择所属开发区" clearable size="small">
  26. <el-option
  27. v-for="dict in dict.type.centerdata_park"
  28. :key="dict.value"
  29. :label="dict.label"
  30. :value="dict.value"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item>
  35. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  36. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  37. </el-form-item>
  38. </el-form>
  39. <el-row :gutter="10" class="mb8">
  40. <el-col :span="1.5">
  41. <el-button
  42. type="primary"
  43. plain
  44. icon="el-icon-plus"
  45. size="mini"
  46. @click="handleAdd"
  47. v-hasPermi="['forest:keyProjects:add']"
  48. >新增
  49. </el-button>
  50. </el-col>
  51. <el-col :span="1.5">
  52. <el-button
  53. type="success"
  54. plain
  55. icon="el-icon-edit"
  56. size="mini"
  57. :disabled="single"
  58. @click="handleUpdate"
  59. v-hasPermi="['forest:keyProjects:edit']"
  60. >修改
  61. </el-button>
  62. </el-col>
  63. <el-col :span="1.5">
  64. <el-button
  65. type="danger"
  66. plain
  67. icon="el-icon-delete"
  68. size="mini"
  69. :disabled="multiple"
  70. @click="handleDelete"
  71. v-hasPermi="['forest:keyProjects:remove']"
  72. >删除
  73. </el-button>
  74. </el-col>
  75. <el-col :span="1.5">
  76. <el-button
  77. type="warning"
  78. plain
  79. icon="el-icon-download"
  80. size="mini"
  81. @click="handleExport"
  82. v-hasPermi="['forest:keyProjects:export']"
  83. >导出
  84. </el-button>
  85. </el-col>
  86. <el-col :span="1.5">
  87. <el-button
  88. type="success"
  89. plain
  90. icon="el-icon-edit"
  91. size="mini"
  92. :disabled="single"
  93. @click="uploadInfo"
  94. v-hasPermi="['forest:keyProjects:edit']"
  95. >上传
  96. </el-button>
  97. </el-col>
  98. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  99. </el-row>
  100. <el-table v-loading="loading" :data="projectsList" @selection-change="handleSelectionChange">
  101. <el-table-column type="selection" width="70" align="center"/>
  102. <el-table-column label="属地辖区" align="center" prop="territoriality"/>
  103. <el-table-column label="所属开发区" align="center" prop="park" :show-overflow-tooltip="true">
  104. <template slot-scope="scope">
  105. <dict-tag :options="dict.type.centerdata_park" :value="scope.row.park"/>
  106. </template>
  107. </el-table-column>
  108. <!-- <el-table-column label="开发区中心点经度" align="center" prop="parkLongitude"/>-->
  109. <!-- <el-table-column label="开发区中心点纬度" align="center" prop="parkLatitude"/>-->
  110. <el-table-column label="项目名称" align="center" prop="projectName" width="150" :show-overflow-tooltip="true"/>
  111. <!-- <el-table-column label="项目环境" align="center" prop="environment">-->
  112. <!-- <template slot-scope="scope">-->
  113. <!-- <dict-tag :options="dict.type.centerdata_environment" :value="scope.row.environment"/>-->
  114. <!-- </template>-->
  115. <!-- </el-table-column>-->
  116. <!-- <el-table-column label="法人单位" align="center" prop="legalUnit"/>-->
  117. <!-- <el-table-column label="工程目标" align="center" prop="projectTarget"/>-->
  118. <!-- <el-table-column label="工程属地" align="center" prop="projectLevel">-->
  119. <!-- <template slot-scope="scope">-->
  120. <!-- <dict-tag :options="dict.type.centerdata_project_level" :value="scope.row.projectLevel"/>-->
  121. <!-- </template>-->
  122. <!-- </el-table-column>-->
  123. <!-- <el-table-column label="建设单位" align="center" prop="constructionUnit"/>-->
  124. <el-table-column label="负责人" align="center" prop="principal"/>
  125. <el-table-column label="联系电话" align="center" prop="phone"/>
  126. <el-table-column label="开复工时间" align="center" prop="startTime"/>
  127. <el-table-column label="计划竣工时间" align="center" prop="endTime"/>
  128. <!-- <el-table-column label="联系电话" align="center" prop="phone"/>-->
  129. <!-- <el-table-column label="建设地点" align="center" prop="constructionSite"/>-->
  130. <!-- <el-table-column label="在建性质" align="center" prop="nature">-->
  131. <!-- <template slot-scope="scope">-->
  132. <!-- <dict-tag :options="dict.type.centerdata_zj_nature" :value="scope.row.nature"/>-->
  133. <!-- </template>-->
  134. <!-- </el-table-column>-->
  135. <el-table-column label="总投资(万元)" align="center" prop="totalInvest" width="120"/>
  136. <el-table-column label="年度计划投资(万元)" align="center" prop="yearInvest" width="100"/>
  137. <!-- <el-table-column label="产业类别" align="center" prop="industryType">-->
  138. <!-- <template slot-scope="scope">-->
  139. <!-- <dict-tag :options="dict.type.centerdata_industry_type" :value="scope.row.industryType"/>-->
  140. <!-- </template>-->
  141. <!-- </el-table-column>-->
  142. <!-- <el-table-column label="项目秘书" align="center" prop="secretary"/>-->
  143. <!-- <el-table-column label="项目秘书职务" align="center" prop="secretaryDuties"/>-->
  144. <!-- <el-table-column label="项目秘书手机" align="center" prop="secretaryPhone"/>-->
  145. <!-- <el-table-column label="建筑面积" align="center" prop="constructionArea"/>
  146. <el-table-column label="所属分类" align="center" prop="cameraSystem">
  147. <template slot-scope="scope">
  148. <dict-tag :options="dict.type.camera_system" :value="scope.row.cameraSystem"/>
  149. </template>
  150. </el-table-column>-->
  151. <el-table-column label="所属部门" align="center" prop="deptName" />
  152. <el-table-column label="创建人" align="center" prop="createName" :show-overflow-tooltip="true"/>
  153. <el-table-column label="创建时间" align="center" prop="createTime" :show-overflow-tooltip="true"/>
  154. <el-table-column label="修改人" align="center" prop="updateName" :show-overflow-tooltip="true"/>
  155. <el-table-column label="修改时间" align="center" prop="updateTime" :show-overflow-tooltip="true"/>
  156. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  157. <template slot-scope="scope">
  158. <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)"
  159. v-hasPermi="['system:role:edit']">
  160. <span class="el-dropdown-link">
  161. <i class="el-icon-d-arrow-right el-icon--right"></i>更多
  162. </span>
  163. <el-dropdown-menu slot="dropdown">
  164. <el-dropdown-item command="edit" icon="el-icon-edit"
  165. v-hasPermi="['forest:keyProjects:edit']">修改
  166. </el-dropdown-item>
  167. <el-dropdown-item command="remove" icon="el-icon-delete"
  168. v-hasPermi="['forest:keyProjects:remove']">删除
  169. </el-dropdown-item>
  170. <el-dropdown-item command="details" icon="el-icon-info"
  171. v-hasPermi="['forest:keyProjects:edit']">详情
  172. </el-dropdown-item>
  173. </el-dropdown-menu>
  174. </el-dropdown>
  175. </template>
  176. </el-table-column>
  177. </el-table>
  178. <pagination
  179. v-show="total>0"
  180. :total="total"
  181. :page.sync="queryParams.pageNum"
  182. :limit.sync="queryParams.pageSize"
  183. @pagination="getList"
  184. />
  185. <!-- 添加或修改重点工程对话框 -->
  186. <el-dialog :title="title" :visible.sync="open" width="1000px" class="form-style">
  187. <el-form ref="form" :model="form" :rules="rules" label-width="160px">
  188. <el-row :gutter="24">
  189. <el-col :span="12">
  190. <el-form-item label="项目名称" prop="projectName">
  191. <el-input v-model="form.projectName" placeholder="请输入项目名称" maxlength="50"/>
  192. </el-form-item>
  193. <el-form-item label="经度" prop="longitude" @dblclick.native="showMap">
  194. <el-input v-model="form.longitude" placeholder="鼠标双击选择经度" maxlength="32"/>
  195. </el-form-item>
  196. <el-form-item label="属地辖区" prop="territoriality">
  197. <el-select v-model="form.territoriality" placeholder="请输入属地辖区" maxlength="32">
  198. <el-option
  199. v-for="item in options"
  200. :key="item.value"
  201. :label="item.label"
  202. :value="item.value"
  203. ></el-option>
  204. </el-select>
  205. </el-form-item>
  206. <!--<el-form-item label="工程属地" prop="projectLevel">
  207. <el-select v-model="form.projectLevel" placeholder="请选择工程属地">
  208. <el-option
  209. v-for="dict in dict.type.centerdata_project_level"
  210. :key="dict.value"
  211. :label="dict.label"
  212. :value="dict.value"
  213. ></el-option>
  214. </el-select>
  215. </el-form-item>
  216. <el-form-item label="建设单位" prop="constructionUnit">
  217. <el-input v-model="form.constructionUnit" placeholder="请输入建设单位" maxlength="50"/>
  218. </el-form-item>-->
  219. <el-form-item label="负责人" prop="principal">
  220. <el-input v-model="form.principal" placeholder="请输入负责人" maxlength="20"/>
  221. </el-form-item>
  222. <el-form-item label="开发区中心点经度" prop="parkLongitude" @dblclick.native="showMaptwo">
  223. <el-input v-model="form.parkLongitude" placeholder="鼠标双击选择经度" maxlength="32"/>
  224. </el-form-item>
  225. <el-form-item label="开复工时间" prop="startTime">
  226. <el-date-picker clearable
  227. v-model="form.startTime"
  228. type="month"
  229. value-format="yyyy-MM"
  230. placeholder="请选择开复工时间" >
  231. </el-date-picker>
  232. </el-form-item>
  233. <el-form-item label="建设地点" prop="constructionSite">
  234. <el-input v-model="form.constructionSite" placeholder="请输入建设地点" maxlength="255"/>
  235. </el-form-item>
  236. <el-form-item label="总投资(万元)" prop="totalInvest">
  237. <el-input v-model="form.totalInvest" placeholder="请输入总投资" maxlength="32"/>
  238. </el-form-item>
  239. <el-form-item label="法人单位" prop="legalUnit">
  240. <el-input v-model="form.legalUnit" placeholder="请输入法人单位" maxlength="32"/>
  241. </el-form-item>
  242. <el-form-item label="项目秘书职务" prop="secretaryDuties">
  243. <el-input v-model="form.secretaryDuties" placeholder="请输入项目秘书职务" maxlength="32"/>
  244. </el-form-item>
  245. <el-form-item label="所属部门" prop="deptId">
  246. <treeselect v-model="form.deptId" :options="deptOptions" multiple:false :show-count="true"
  247. placeholder="请选择部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'"/>
  248. </el-form-item>
  249. </el-col>
  250. <el-col :span="12">
  251. <el-form-item label="项目环境" prop="environment">
  252. <el-select v-model="form.environment" placeholder="请选择项目环境">
  253. <el-option
  254. v-for="dict in dict.type.centerdata_environment"
  255. :key="dict.value"
  256. :label="dict.label"
  257. :value="dict.value"
  258. ></el-option>
  259. </el-select>
  260. </el-form-item>
  261. <el-form-item label="纬度" prop="latitude" @dblclick.native="showMap">
  262. <el-input v-model="form.latitude" placeholder="鼠标双击选择纬度" maxlength="32"/>
  263. </el-form-item>
  264. <el-form-item label="所属开发区" prop="park">
  265. <el-select v-model="form.park" placeholder="请选择所属开发区">
  266. <el-option
  267. v-for="dict in dict.type.centerdata_park"
  268. :key="dict.value"
  269. :label="dict.label"
  270. :value="dict.value"
  271. ></el-option>
  272. </el-select>
  273. </el-form-item>
  274. <el-form-item label="联系电话" prop="phone">
  275. <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="13"/>
  276. </el-form-item>
  277. <el-form-item label="开发区中心点纬度" prop="parkLatitude" @dblclick.native="showMaptwo">
  278. <el-input v-model="form.parkLatitude" placeholder="鼠标双击选择纬度" maxlength="32"/>
  279. </el-form-item>
  280. <el-form-item label="计划竣工时间" prop="endTime">
  281. <el-date-picker clearable
  282. v-model="form.endTime"
  283. type="month"
  284. value-format="yyyy-MM"
  285. placeholder="请选择计划竣工时间">
  286. </el-date-picker>
  287. </el-form-item>
  288. <el-form-item label="在建性质" prop="nature">
  289. <el-select v-model="form.nature" placeholder="请选择在建性质">
  290. <el-option
  291. v-for="dict in dict.type.centerdata_zj_nature"
  292. :key="dict.value"
  293. :label="dict.label"
  294. :value="dict.value"
  295. ></el-option>
  296. </el-select>
  297. </el-form-item>
  298. <el-form-item label="年度计划投资(万元)" prop="yearInvest">
  299. <el-input v-model="form.yearInvest" placeholder="请输入年度计划投资" maxlength="32"/>
  300. </el-form-item>
  301. <el-form-item label="项目秘书" prop="secretary">
  302. <el-input v-model="form.secretary" placeholder="请输入项目秘书" maxlength="32"/>
  303. </el-form-item>
  304. <el-form-item label="项目秘书手机" prop="secretaryPhone">
  305. <el-input v-model="form.secretaryPhone" placeholder="请输入项目秘书手机" maxlength="13"/>
  306. </el-form-item>
  307. <el-form-item label="产业类别" prop="industryType">
  308. <el-select v-model="form.industryType" placeholder="请选择产业类别">
  309. <el-option
  310. v-for="dict in dict.type.centerdata_industry_type"
  311. :key="dict.value"
  312. :label="dict.label"
  313. :value="dict.value"
  314. ></el-option>
  315. </el-select>
  316. </el-form-item>
  317. <!--<el-form-item label="工程目标" prop="projectTarget">
  318. <el-input v-model="form.projectTarget" placeholder="请输入工程目标" maxlength="255"/>
  319. </el-form-item>
  320. <el-form-item label="建筑面积" prop="constructionArea">
  321. <el-input v-model="form.constructionArea" placeholder="请输入建筑面积" maxlength="50"/>
  322. </el-form-item>
  323. <el-form-item label="所属分类" prop="cameraSystem">
  324. <el-select v-model="form.cameraSystem" placeholder="请选择所属分类">
  325. <el-option
  326. v-for="dict in dict.type.camera_system"
  327. :key="dict.value"
  328. :label="dict.label"
  329. :value="dict.value"
  330. ></el-option>
  331. </el-select>
  332. </el-form-item>-->
  333. </el-col>
  334. </el-row>
  335. <el-row>
  336. <el-col :span="24">
  337. <el-form-item label="绑定设备" prop="deviceList">
  338. <el-select v-model="form.deviceList" filterable placeholder="请选择设备" multiple>
  339. <el-option
  340. v-for="dict in cameraList"
  341. :key="dict.id"
  342. :label="dict.cameraName"
  343. :value="dict.id"
  344. ></el-option>
  345. </el-select>
  346. </el-form-item>
  347. </el-col>
  348. </el-row>
  349. <el-row>
  350. <el-col :span="24">
  351. <el-form-item label="建设内容" prop="introduction">
  352. <el-input v-model="form.introduction" type="textarea" placeholder="请输入建设内容" maxlength="500"
  353. :autosize="{ minRows: 5, maxRows: 5}"/>
  354. </el-form-item>
  355. </el-col>
  356. </el-row>
  357. <el-row>
  358. <el-col :span="24">
  359. <el-form-item label="附件" prop="photoId">
  360. <ImageUpload ref="ImageUpload" :limit="1" :fileType="['png', 'jpg', 'jpeg']" :value="form.photoId"
  361. @input="getUrl"></ImageUpload>
  362. </el-form-item>
  363. </el-col>
  364. </el-row>
  365. </el-form>
  366. <div slot="footer" class="dialog-footer">
  367. <el-button type="primary" @click="submitForm">确 定</el-button>
  368. <el-button @click="cancel">取 消</el-button>
  369. </div>
  370. </el-dialog>
  371. <!-- 进度提交 -->
  372. <el-dialog :title="title" :visible.sync="scheduleUpload" width="800px" class="form-style"><!--:show-close="false"-->
  373. <el-button style="float: right;z-index: 999; position: relative" type="primary" @click="submitFormToPicture">上 传</el-button>
  374. <el-form ref="formUpload" :model="form" :rules="rules" label-width="80px">
  375. <el-row :gutter="24">
  376. <el-col :span="12">
  377. <el-form-item label="时间" prop="scheduleTime">
  378. <el-date-picker clearable size="small"
  379. :disabled="!scheduleUpload"
  380. v-model="form.scheduleTime"
  381. type="date"
  382. value-format="yyyy-MM-dd HH:mm:ss"
  383. placeholder="选择时间">
  384. </el-date-picker>
  385. </el-form-item>
  386. </el-col>
  387. <el-col :span="24">
  388. <el-form-item label="备注">
  389. <el-input v-model="form.scheduleRemark" type="textarea" placeholder="请输入内容" maxlength="500"/>
  390. </el-form-item>
  391. </el-col>
  392. </el-row>
  393. <el-form-item label="附件" prop="schedulePictures">
  394. <ImageUpload ref="ImageUpload" :limit="10" :fileType="['jpg', 'png','jpeg']" :value="form.schedulePictures"
  395. @input="getUrlToSchedule"></ImageUpload>
  396. </el-form-item>
  397. </el-form>
  398. </el-dialog>
  399. <el-dialog :title="title" :visible.sync="scheduleHistory" width="900px" class="form-style">
  400. <!-- 修改内容回显开始 -->
  401. <el-form ref="form" :model="form" :rules="rules" label-width="150px">
  402. <ul class="xg_cont">
  403. <li>
  404. <h4 class="sjxtitle">项目名称</h4>
  405. <span class="sjx_cont">{{form.projectName}}</span>
  406. </li>
  407. <li>
  408. <h4 class="sjxtitle">项目环境</h4>
  409. <span class="sjx_cont">
  410. <dict-tag :options="dict.type.centerdata_environment" :value="form.environment"/>
  411. </span>
  412. </li>
  413. <li>
  414. <h4 class="sjxtitle">经度</h4>
  415. <span class="sjx_cont">{{form.longitude}}</span>
  416. </li>
  417. <li>
  418. <h4 class="sjxtitle">纬度</h4>
  419. <span class="sjx_cont">{{form.latitude}}</span>
  420. </li>
  421. <li>
  422. <h4 class="sjxtitle">属地辖区</h4>
  423. <span class="sjx_cont">{{form.territoriality}}</span>
  424. </li>
  425. <li>
  426. <h4 class="sjxtitle">所属开发区</h4>
  427. <span class="sjx_cont">
  428. <dict-tag :options="dict.type.centerdata_park" :value="form.park"/>
  429. </span>
  430. </li>
  431. <li>
  432. <h4 class="sjxtitle">开发区中心点经度</h4>
  433. <span class="sjx_cont">{{form.parkLongitude}}</span>
  434. </li>
  435. <li>
  436. <h4 class="sjxtitle">开发区中心点纬度</h4>
  437. <span class="sjx_cont">{{form.parkLatitude}}</span>
  438. </li>
  439. <li>
  440. <h4 class="sjxtitle">开复工时间</h4>
  441. <span class="sjx_cont">{{form.startTime}}</span>
  442. </li>
  443. <li>
  444. <h4 class="sjxtitle">计划竣工时间</h4>
  445. <span class="sjx_cont">{{form.endTime}}</span>
  446. </li>
  447. <li>
  448. <h4 class="sjxtitle">建设地点</h4>
  449. <span class="sjx_cont">{{form.constructionSite}}</span>
  450. </li>
  451. <li>
  452. <h4 class="sjxtitle">在建性质</h4>
  453. <span class="sjx_cont">
  454. <dict-tag :options="dict.type.centerdata_zj_nature" :value="form.nature"/>
  455. </span>
  456. </li>
  457. <li>
  458. <h4 class="sjxtitle">总投资(万元)</h4>
  459. <span class="sjx_cont">{{form.totalInvest}}</span>
  460. </li>
  461. <li>
  462. <h4 class="sjxtitle">年度计划投资(万元)</h4>
  463. <span class="sjx_cont">{{form.yearInvest}}</span>
  464. </li>
  465. <li>
  466. <h4 class="sjxtitle">法人单位</h4>
  467. <span class="sjx_cont">{{form.legalUnit}}</span>
  468. </li>
  469. <li>
  470. <h4 class="sjxtitle">项目秘书</h4>
  471. <span class="sjx_cont">{{form.secretary}}</span>
  472. </li>
  473. <li>
  474. <h4 class="sjxtitle">项目秘书职务</h4>
  475. <span class="sjx_cont">{{form.secretaryDuties}}</span>
  476. </li>
  477. <li>
  478. <h4 class="sjxtitle">项目秘书手机</h4>
  479. <span class="sjx_cont">{{form.secretaryPhone}}</span>
  480. </li>
  481. <li>
  482. <h4 class="sjxtitle">所属部门</h4>
  483. <span class="sjx_cont">{{form.deptName}}</span>
  484. </li>
  485. <li>
  486. <h4 class="sjxtitle">产业类别</h4>
  487. <span class="sjx_cont">
  488. <dict-tag :options="dict.type.centerdata_industry_type" :value="form.industryType"/>
  489. </span>
  490. </li>
  491. <li class="jiansheCont">
  492. <h4 class="sjxtitle">绑定设备</h4>
  493. <span class="sjx_cont" >
  494. <span v-for="(list,index) in form.deviceList">
  495. <span v-for="dict in cameraList" v-if="list == dict.id">
  496. {{ dict.cameraName }}<span v-if="index!=form.deviceList.length-1" >,</span>
  497. </span>
  498. </span>
  499. </span>
  500. </li>
  501. <li class="jiansheCont">
  502. <h4 class="sjxtitle">建设内容</h4>
  503. <span class="sjx_cont js_cont">{{form.introduction}}</span>
  504. </li>
  505. <li class="jiansheCont">
  506. <h4 class="sjxtitle">附件</h4>
  507. <el-image
  508. :src="form.photoId" style="width:150px;height:150px;"
  509. :preview-src-list="[form.photoId]">
  510. </el-image>
  511. </li>
  512. </ul>
  513. </el-form>
  514. <!-- 修改内容回显结束 -->
  515. <el-form ref="historyForm" :inline="true" :model="historyQueryParams" :rules="rules" label-width="80px">
  516. <el-form-item label="起始时间" prop="startTime">
  517. <el-date-picker clearable size="small"
  518. :disabled="!scheduleHistory"
  519. v-model="historyQueryParams.startTime"
  520. type="date"
  521. value-format="yyyy-MM-dd"
  522. placeholder="选择起始时间">
  523. </el-date-picker>
  524. </el-form-item>
  525. <el-form-item label="终止时间" prop="endTime">
  526. <el-date-picker clearable size="small"
  527. :disabled="!scheduleHistory"
  528. v-model="historyQueryParams.endTime"
  529. type="date"
  530. value-format="yyyy-MM-dd"
  531. placeholder="选择终止时间">
  532. </el-date-picker>
  533. </el-form-item>
  534. <el-form-item>
  535. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleHistoryQuery" :loading="loading1">搜索</el-button>
  536. <el-button icon="el-icon-refresh" size="mini" @click="resetHistoryQuery">重置</el-button>
  537. </el-form-item>
  538. </el-form>
  539. <b>{{ this.keyProjectsName }}</b><br><br>
  540. <div class="block" style="overflow: auto;">
  541. <el-timeline :reverse="!scheduleHistory">
  542. <el-timeline-item
  543. v-for="(activity, index) in activities"
  544. :key="index"
  545. :timestamp="activity.scheduleTime" placement="top">
  546. <div>
  547. <span>{{ activity.deptName }} -- {{ activity.createName }}</span>
  548. <el-button
  549. size="mini"
  550. type="text"
  551. icon="el-icon-delete"
  552. @click="scheduleDeleteByOne(activity.scheduleId)"
  553. v-hasPermi="['forest:keyProjects:remove']"
  554. >删除
  555. </el-button><br>
  556. <span v-if="activity.scheduleRemark !== '' && activity.scheduleRemark != null"> (备注:{{
  557. activity.scheduleRemark
  558. }})</span>
  559. </div>
  560. <div v-if="activity.schedulePictures !== null">
  561. <template v-for="(imageUrl, imgIndex) in activity.schedulePictures.split(',')">
  562. <el-image :src="imageUrl" :key="imgIndex" style="width:8rem; height: 8rem; margin:2px" :preview-src-list="[imageUrl]">
  563. </el-image>
  564. </template>
  565. </div>
  566. </el-timeline-item>
  567. </el-timeline>
  568. </div>
  569. </el-dialog>
  570. <ISuperMap ref="ISuperMap" v-if="ISuperMapvisible" @send="send"/>
  571. <ISuperMap ref="ISuperMaptwo" v-if="ISuperMapvisibletwo" @send="sendtwo"/>
  572. </div>
  573. </template>
  574. <script>
  575. import {
  576. addProjects,
  577. delProjects,
  578. getProjects, getProjectsSchedule,
  579. listProjects,
  580. updateProjects, addProjectsScheduleInfo, getHistoryByTime, deleteSchedule
  581. } from "@/api/data/generalbusiness/keyProjects/projects";
  582. import {selectCenterMonitorlList} from "@/api/data/digitalforest/animal/animal";
  583. import deptselector from '@/views/components/deptselector.vue'
  584. import supermap from '@/views/components/supermap.vue'
  585. import {checkLat, checkLon, checkPositiveDecimal4, validPhoneMobile} from "@/api/rules/rules";
  586. import {treeselect} from "@/api/system/dept";
  587. import Treeselect from "@riophae/vue-treeselect";
  588. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  589. import ISuperMap from "@/views/data/common/ISuperMap";
  590. import TreeDept from "../../../../components/treeDept";
  591. export default {
  592. name: "Projects",
  593. dicts: ['project_type', "camera_system", 'centerdata_project_level','centerdata_zj_nature','centerdata_industry_type','centerdata_environment','centerdata_park'],
  594. components: {TreeDept, deptselector, supermap, Treeselect, ISuperMap},
  595. data() {
  596. return {
  597. sign: 1,
  598. ISuperMapvisible: false,
  599. ISuperMapvisibletwo: false,
  600. deptOptions: undefined,
  601. disabled:true,
  602. // 遮罩层
  603. loading: true,
  604. loading1: false,
  605. // 选中数组
  606. ids: [],
  607. titleLongitude: '经纬度',
  608. showLongitude: false,
  609. // 非单个禁用
  610. single: true,
  611. // 非多个禁用
  612. multiple: true,
  613. // 显示搜索条件
  614. showSearch: true,
  615. // 总条数
  616. total: 0,
  617. // 重点工程表格数据
  618. projectsList: [],
  619. // 弹出层标题
  620. title: "",
  621. // 是否显示弹出层
  622. open: false,
  623. scheduleUpload: false,
  624. scheduleHistory: false,
  625. keyProjectsId: null,
  626. keyProjectsName: null,
  627. scheduleTime: null,
  628. activities: null,
  629. // 查询参数
  630. queryParams: {
  631. pageNum: 1,
  632. pageSize: 10,
  633. projectName: null,
  634. projectTarget: null,
  635. projectType: null,
  636. projectLevel: null,
  637. constructionUnit: null,
  638. principal: null,
  639. phone: null,
  640. constructionSite: null,
  641. constructionArea: null,
  642. longitude: null,
  643. photoId: null,
  644. schedulePictures: null,
  645. latitude: null,
  646. cameraSystem: null,
  647. deptId: null,
  648. introduction: null,
  649. parkLongitude: null,
  650. parkLatitude: null,
  651. },
  652. historyQueryParams: {
  653. startTIme: null,
  654. endTime: null,
  655. keyProjectsId: null,
  656. },
  657. options: [{
  658. value: '市本级',
  659. label: '市本级'
  660. }, {
  661. value: '铁东区',
  662. label: '铁东区'
  663. }, {
  664. value: '铁西区',
  665. label: '铁西区'
  666. }, {
  667. value: '梨树县',
  668. label: '梨树县'
  669. }, {
  670. value: '双辽市',
  671. label: '双辽市'
  672. },{
  673. value: '伊通县',
  674. label: '伊通县'
  675. }],
  676. // 表单参数
  677. form: {},
  678. // 表单校验
  679. rules: {
  680. deptId: [
  681. {required: true, message: "所属部门不能为空", trigger: "blur"}
  682. ],
  683. projectName: [
  684. {required: true, message: "项目名称不能为空", trigger: "blur"}
  685. ],
  686. principal: [
  687. {required: true, message: "负责人不能为空", trigger: "blur"}
  688. ],
  689. constructionSite: [
  690. {required: true, message: "建设地点不能为空", trigger: "blur"}
  691. ],
  692. /* projectTarget: [
  693. {required: true, message: "工程目标不能为空", trigger: "blur"}
  694. ],
  695. projectLevel: [
  696. {required: true, message: "工程属地不能为空", trigger: "change"}
  697. ],*/
  698. longitude: [
  699. {required: true, message: "经度不能为空", trigger: ["blur", "change"]},
  700. {validator: checkLon, trigger: 'blur'}
  701. ],
  702. latitude: [
  703. {required: true, message: "纬度不能为空", trigger: ["blur", "change"]},
  704. {validator: checkLat, trigger: 'blur'}
  705. ],
  706. parkLongitude: [
  707. {validator: checkLon, trigger: ["blur", "change"]}
  708. ],
  709. parkLatitude: [
  710. {validator: checkLat, trigger: ["blur", "change"]}
  711. ],
  712. introduction: [
  713. {required: true, message: "建设内容不能为空", trigger: "blur"}
  714. ],
  715. cameraSystem: [
  716. {required: true, message: "所属分类不能为空", trigger: "change"}
  717. ],
  718. phone: [
  719. {required: true, message: "联系电话不能为空", trigger: "blur"},
  720. {validator: validPhoneMobile, trigger: 'blur'}
  721. ],
  722. totalInvest: [
  723. {validator: checkPositiveDecimal4, trigger: 'blur'}
  724. ],
  725. yearInvest: [
  726. {validator: checkPositiveDecimal4, trigger: 'blur'}
  727. ],
  728. secretaryPhone: [
  729. {validator: validPhoneMobile, trigger: 'blur'}
  730. ],
  731. scheduleTime: [
  732. {required: true, message: "时间不能为空", trigger: "blur"}
  733. ],
  734. schedulePictures: [
  735. {required: true, message: "至少上传一张图片", trigger: "blur"}
  736. ]
  737. },
  738. cameraList: [],
  739. cameraNameList: [],
  740. };
  741. },
  742. created() {
  743. this.getList();
  744. this.getTreeselect();
  745. selectCenterMonitorlList(this.queryParams).then(response => {
  746. this.cameraList = response.data;
  747. });
  748. },
  749. methods: {
  750. handleClick() {
  751. alert('button click');
  752. },
  753. // 更多操作触发
  754. handleCommand(command, row) {
  755. switch (command) {
  756. case 'edit':
  757. this.handleUpdate(row)
  758. break
  759. case 'remove':
  760. this.handleDelete(row)
  761. break
  762. case 'details':
  763. this.getScheduleHistory(row)
  764. break
  765. default:
  766. break
  767. }
  768. },
  769. /** 查询部门下拉树结构 */
  770. getTreeselect() {
  771. treeselect().then(response => {
  772. this.deptOptions = response.data
  773. })
  774. },
  775. hx(node) {
  776. this.form.deptId = node.id
  777. this.form.deptName = node.label
  778. },
  779. /** 查询重点工程列表 */
  780. getList() {
  781. this.loading = true;
  782. listProjects(this.queryParams).then(response => {
  783. this.projectsList = response.rows;
  784. this.total = response.total;
  785. this.loading = false;
  786. });
  787. },
  788. getUrl(url) {
  789. this.form.photoId = url
  790. },
  791. getUrlToSchedule(url) {
  792. this.form.schedulePictures = url
  793. },
  794. setDataDeptId(e) {
  795. this.form.deptId = e.deptId
  796. this.form.deptName = e.deptName
  797. },
  798. showLatLng: function (lat, lng) {
  799. this.form.latitude = lat
  800. this.form.longitude = lng
  801. },
  802. showMap() {
  803. this.ISuperMapvisible = true;
  804. this.$nextTick(() => {
  805. this.$refs.ISuperMap.init(this.sign, {
  806. id: this.form.id,
  807. longitude: this.form.longitude,
  808. latitude: this.form.latitude,
  809. xiantude: this.form.longitude//this.form.longitude换成每个页面对应线或者面对应的字段
  810. })
  811. })
  812. },
  813. showMaptwo() {
  814. this.ISuperMapvisibletwo = true;
  815. this.$nextTick(() => {
  816. this.$refs.ISuperMaptwo.init(this.sign, {
  817. id: this.form.id,
  818. parkLongitude: this.form.longitude,
  819. parkLatitude: this.form.latitude,
  820. xiantude: this.form.longitude//this.form.longitude换成每个页面对应线或者面对应的字段
  821. })
  822. })
  823. },
  824. send(val) {
  825. if (val === true) {
  826. this.ISuperMapvisible = false;
  827. return;
  828. }
  829. if (this.sign === 1) {
  830. this.form.longitude = val.longitude;
  831. this.form.latitude = val.latitude;
  832. }
  833. if (this.sign === 2 || this.sign === 3) this.form.longitude = val.xiantude;//this.form.longitude 换成对应的线或区域的字段
  834. this.ISuperMapvisible = false
  835. },
  836. sendtwo(val) {
  837. if (val === true) {
  838. this.ISuperMapvisibletwo = false;
  839. return;
  840. }
  841. if (this.sign === 1) {
  842. this.form.parkLongitude = val.longitude;
  843. this.form.parkLatitude = val.latitude;
  844. }
  845. if (this.sign === 2 || this.sign === 3) this.form.parkLongitude = val.xiantude;//this.form.parkLongitude 换成对应的线或区域的字段
  846. this.ISuperMapvisibletwo = false
  847. },
  848. // 取消按钮
  849. cancel() {
  850. this.open = false;
  851. this.reset();
  852. },
  853. cancelToPicture() {
  854. this.schedule = false;
  855. this.reset();
  856. },
  857. // 表单重置
  858. reset() {
  859. this.form = {
  860. id: null,
  861. projectName: null,
  862. projectTarget: null,
  863. projectType: null,
  864. projectLevel: null,
  865. constructionUnit: null,
  866. principal: null,
  867. phone: null,
  868. photoId: null,
  869. constructionSite: null,
  870. constructionArea: null,
  871. longitude: null,
  872. latitude: null,
  873. cameraSystem: null,
  874. deptId: null,
  875. introduction: null,
  876. schedulePictures: null,
  877. scheduleTime: null,
  878. keyProjectsId: null,
  879. activities: null,
  880. scheduleRemark: null,
  881. territoriality: null,
  882. parkLongitude: null,
  883. totalInvest: null,
  884. legalUnit: null,
  885. secretaryDuties: null,
  886. industryType: null,
  887. park: null,
  888. nature: null,
  889. yearInvest: null,
  890. secretary: null,
  891. parkLatitude: null,
  892. secretaryPhone: null
  893. };
  894. this.resetForm("form");
  895. },
  896. /** 搜索按钮操作 */
  897. handleQuery() {
  898. this.queryParams.pageNum = 1;
  899. this.getList();
  900. },
  901. /** 历史进度记录搜索按钮操作 */
  902. handleHistoryQuery() {
  903. this.historyQueryParams.keyProjectsId = this.form.id;
  904. this.loading1 = true;
  905. getHistoryByTime(this.historyQueryParams).then(response => {
  906. this.activities = response.data;
  907. this.loading1 = false;
  908. });
  909. },
  910. /** 重置按钮操作 */
  911. resetQuery() {
  912. this.resetForm("queryForm");
  913. this.handleQuery();
  914. },
  915. resetHistoryQuery(){
  916. this.resetForm("historyForm");
  917. this.handleHistoryQuery();
  918. },
  919. // 多选框选中数据
  920. handleSelectionChange(selection) {
  921. this.ids = selection.map(item => item.id)
  922. this.single = selection.length !== 1
  923. this.multiple = !selection.length
  924. },
  925. /** 新增按钮操作 */
  926. handleAdd() {
  927. this.reset();
  928. this.open = true;
  929. this.title = "添加重点工程";
  930. },
  931. /** 修改按钮操作 */
  932. handleUpdate(row) {
  933. this.reset();
  934. const id = row.id || this.ids
  935. getProjects(id).then(response => {
  936. this.form = response.data;
  937. this.open = true;
  938. this.title = "修改重点工程";
  939. });
  940. },
  941. /** 上传按钮操作 */
  942. uploadInfo(row) {
  943. this.reset();
  944. const id = row.id || this.ids
  945. this.form.keyProjectsId = id[0];
  946. this.title = "进度上传";
  947. this.scheduleUpload = true;
  948. },
  949. /** 历史进度查看 */
  950. getScheduleHistory(row) {
  951. this.keyProjectsId = row.id || this.ids
  952. this.keyProjectsName = row.projectName;
  953. getProjectsSchedule(this.keyProjectsId).then(response => {
  954. this.activities = response.data;
  955. this.scheduleHistory = true;
  956. this.title = "详情";
  957. })
  958. this.reset();
  959. const id = row.id || this.ids
  960. getProjects(id).then(response => {
  961. this.form = response.data;
  962. });
  963. },
  964. /** 提交按钮 */
  965. submitForm() {
  966. this.$refs["form"].validate(valid => {
  967. if (valid) {
  968. if (this.form.id != null) {
  969. updateProjects(this.form).then(() => {
  970. this.$modal.msgSuccess("修改成功");
  971. this.open = false;
  972. this.getList();
  973. });
  974. } else {
  975. addProjects(this.form).then(() => {
  976. this.$modal.msgSuccess("新增成功");
  977. this.open = false;
  978. this.getList();
  979. });
  980. }
  981. }
  982. });
  983. },
  984. submitFormToPicture() {
  985. this.$refs["formUpload"].validate(valid => {
  986. if (valid) {
  987. // this.form.keyProjectsId = this.keyProjectsId;
  988. addProjectsScheduleInfo(this.form).then(() => {
  989. this.$modal.msgSuccess("新增成功");
  990. this.scheduleUpload = false;
  991. this.getList();
  992. });
  993. this.reset();
  994. }
  995. });
  996. },
  997. /** 删除按钮操作 */
  998. handleDelete(row) {
  999. const ids = row.id || this.ids;
  1000. this.$modal.confirm('是否删除选中的数据?').then(function () {
  1001. return delProjects(ids);
  1002. }).then(() => {
  1003. this.getList();
  1004. this.$modal.msgSuccess("删除成功");
  1005. }).catch(() => {
  1006. });
  1007. },
  1008. /** 导出按钮操作 */
  1009. handleExport() {
  1010. this.download('sooka-sponest-center-data/projects/export', {
  1011. ...this.queryParams
  1012. }, `重点工程_${new Date().getTime()}.xlsx`)
  1013. },
  1014. /** 删除单条进度信息 */
  1015. scheduleDeleteByOne(scheduleId){
  1016. this.$modal.confirm('是否删除选中的数据?').then(function () {
  1017. return deleteSchedule(scheduleId);
  1018. }).then(() => {
  1019. this.handleHistoryQuery();
  1020. this.$modal.msgSuccess("删除成功");
  1021. }).catch(() => {
  1022. });
  1023. }
  1024. }
  1025. };
  1026. </script>
  1027. <style>
  1028. .dialog-header {
  1029. display: flex;
  1030. justify-content: space-between;
  1031. align-items: center;
  1032. padding: 20px;
  1033. /* background-color: #f5f7fa; border-bottom: 1px solid #ebeef5; */
  1034. }
  1035. .dialog-header span {
  1036. font-size: 18px;
  1037. font-weight: bold;
  1038. }
  1039. h4,ul,li{
  1040. margin: 0;
  1041. padding: 0;
  1042. }
  1043. .xg_cont{
  1044. padding:0;
  1045. color: #606266;
  1046. font-size: 14px;
  1047. word-break: break-all;
  1048. overflow: hidden;
  1049. }
  1050. .xg_cont li{
  1051. list-style: none;
  1052. width: 50%;
  1053. float: left;
  1054. margin:0 0 10px 0;
  1055. }
  1056. .xg_cont li.jiansheCont{
  1057. width:100%;
  1058. }
  1059. .sjxtitle{
  1060. width: 160px;
  1061. line-height: 36px !important;
  1062. font-weight: 700;
  1063. float: left;
  1064. text-align: right;
  1065. white-space: nowrap;
  1066. font-size: 14px;
  1067. vertical-align: top;
  1068. }
  1069. .sjx_cont{
  1070. color: #909295;
  1071. line-height: 36px;
  1072. width: 63%;
  1073. display: block;
  1074. margin: 0 0 0 170px;
  1075. vertical-align: top;
  1076. }
  1077. .js_cont{
  1078. width: 81%;
  1079. }
  1080. </style>