editTable.vue 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033
  1. <template>
  2. <el-card>
  3. <el-row type="flex" justify="space-between">
  4. <el-col :span="1.5" style="display: flex; align-items: center;">
  5. <el-form label-width="100px" style="display: flex; align-items: center;">
  6. <el-form-item style="text-align: center;margin: 0 0 0 -100px;">
  7. <el-button size="mini" type="primary" v-if="activeName=='basic' || activeName=='cloum'" @click="submitForm()">保存</el-button>
  8. <el-button size="mini" @click="close()">返回</el-button>
  9. </el-form-item>
  10. </el-form>
  11. </el-col>
  12. </el-row>
  13. <el-tabs v-model="activeName">
  14. <el-tab-pane label="基本信息" name="basic">
  15. <basic-info-form ref="basicInfo" :info="info" />
  16. </el-tab-pane>
  17. <el-tab-pane label="字段信息" name="cloum">
  18. <el-row type="flex" style="margin-bottom: 20px;" v-if="activeName=='cloum'" :gutter="10" justify="end">
  19. <el-col :span="1.5" style="display: flex; align-items: center;">
  20. <el-button style="background-color: #FFE9ED;color: #E58481;border: 1px solid #E58481;" type="warning" plain
  21. icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:post:add']">新增</el-button>
  22. </el-col>
  23. <el-col :span="1.5" style="display: flex; align-items: center;">
  24. <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
  25. v-hasPermi="['system:post:remove']" style="background-color: #FFD6B0;color: #EA551A;border: 1px solid #F4AD6B;">删除</el-button>
  26. </el-col>
  27. <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
  28. </el-row>
  29. <el-table ref="dragTable" @row-dblclick="dbSelectedZd" align="center" :data="cloumns" row-key="columnId"
  30. :max-height="tableHeight" @selection-change="handleSelectionChange">
  31. <el-table-column type="selection" width="55" align="center" />
  32. <el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" align="center" />
  33. <el-table-column label="字段列名" prop="columnName" min-width="10%" :show-overflow-tooltip="true" align="center" />
  34. <el-table-column label="字段描述" min-width="10%" align="center">
  35. <template slot-scope="scope">
  36. <el-input v-model="scope.row.columnComment"></el-input>
  37. </template>
  38. </el-table-column>
  39. <el-table-column label="物理类型" prop="columnType" align="center" min-width="10%" :show-overflow-tooltip="true" />
  40. <el-table-column label="字段显示规则" align="center" prop="mask" min-width="13%" />
  41. <el-table-column label="排序" min-width="8%" align="center" prop="sort" />
  42. <el-table-column label="输入字段" min-width="10%" align="center">
  43. <template slot-scope="scope">
  44. <el-checkbox true-label="Y" false-label="N" v-model="scope.row.isIn"></el-checkbox>
  45. </template>
  46. </el-table-column>
  47. <el-table-column label="显示字段" min-width="10%" align="center">
  48. <template slot-scope="scope">
  49. <el-checkbox true-label="Y" false-label="N" v-model="scope.row.isOut"></el-checkbox>
  50. </template>
  51. </el-table-column>
  52. <el-table-column label="查询" min-width="8%" align="center">
  53. <template slot-scope="scope">
  54. <el-checkbox true-label="1" false-label="0" v-model="scope.row.isQuery"></el-checkbox>
  55. </template>
  56. </el-table-column>
  57. <el-table-column label="关联HR字段" min-width="13%" align="center" prop="hrParentId">
  58. <template slot-scope="scope">
  59. <div>
  60. {{scope.row.hrParentName}}
  61. </div>
  62. </template>
  63. </el-table-column>
  64. <el-table-column label="缺省值" min-width="10%" align="center" prop="defaultValue" />
  65. <el-table-column label="外键" min-width="10%" align="center" prop="foreignKey">
  66. <template slot-scope="scope">
  67. <div>
  68. {{scope.row.foreignKeyName}}
  69. </div>
  70. </template>
  71. </el-table-column>
  72. <el-table-column label="必填" min-width="8%" align="center">
  73. <template slot-scope="scope">
  74. <el-checkbox true-label="1" false-label="0" v-model="scope.row.isRequired"></el-checkbox>
  75. </template>
  76. </el-table-column>
  77. <el-table-column label="显示类型" min-width="12%" align="center">
  78. <template slot-scope="scope">
  79. <el-select v-model="scope.row.htmlType">
  80. <el-option label="文本框" value="input" />
  81. <el-option label="文本域" value="textarea" />
  82. <el-option label="下拉框" value="select" />
  83. <el-option label="单选框" value="radio" />
  84. <el-option label="复选框" value="checkbox" />
  85. <el-option label="日期控件" value="datetime" />
  86. <el-option label="图片上传" value="imageUpload" />
  87. <el-option label="文件上传" value="fileUpload" />
  88. <el-option label="富文本控件" value="editor" />
  89. <el-option label="hr" value="hr" />
  90. </el-select>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="字典类型" min-width="12%" align="center">
  94. <template slot-scope="scope">
  95. <el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择">
  96. <el-option v-for="dict in dictOptions" :key="dict.dictType" :label="dict.dictName" :value="dict.dictType">
  97. <span style="float: left">{{ dict.dictName }}</span>
  98. <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
  99. </el-option>
  100. </el-select>
  101. </template>
  102. </el-table-column>
  103. </el-table>
  104. <!-- 添加或修改岗位对话框 -->
  105. <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="openZd" width="70vw" append-to-body>
  106. <el-form ref="formZd" :model="formZd" :rules="rulesZd" label-width="120px">
  107. <el-row>
  108. <el-col :span="8">
  109. <el-form-item label="字段名:" prop="columnName">
  110. <el-input :disabled="this.formZd.id" v-model="formZd.columnName" placeholder="请输入字段名" />
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="8">
  114. <el-form-item label="字段描述:" prop="columnComment">
  115. <el-input v-model="formZd.columnComment" placeholder="请输入字段描述" />
  116. </el-form-item>
  117. </el-col>
  118. <el-col :span="8">
  119. <el-form-item label="物理类型:" prop="columnType">
  120. <el-input v-model="formZd.columnType" placeholder="请输入物理类型" />
  121. </el-form-item>
  122. </el-col>
  123. </el-row>
  124. <el-row>
  125. <el-col :span="8">
  126. <el-form-item label="字段显示规则:" prop="mask">
  127. <el-input v-model="formZd.mask" placeholder="请输入字段显示规则" />
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="8">
  131. <el-form-item label="排序:" prop="sort">
  132. <el-input-number style="width: 100%;" v-model="formZd.sort" placeholder="请输入排序" />
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="8">
  136. <el-form-item label="正则表达式:" prop="regular">
  137. <el-input v-model="formZd.regular" placeholder="请输入正则表达式" />
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. <el-row>
  142. <el-col :span="8">
  143. <el-form-item label="外键(FK):" prop="foreignKey">
  144. <!-- <el-select style="width: 100%;" filterable v-model="formZd.foreignKey" placeholder="请选择外键(FK)" clearable size="small">
  145. <el-option v-for="dict in columList" :key="dict.columnId" :label="dict.columnName" :value="dict.columnId" />
  146. </el-select> -->
  147. <div style="cursor: pointer;" @click="fkzdFn">
  148. <el-input readonly style="width: 100%;" clearable v-model="ForeName" placeholder="请选择外键(FK)" />
  149. </div>
  150. </el-form-item>
  151. </el-col>
  152. <el-col :span="8">
  153. <el-form-item label="关联HR字段:" prop="hrParentId">
  154. <el-select style="width: 100%;" v-model="formZd.hrParentId" placeholder="请选择关联HR字段" clearable>
  155. <el-option v-for="dict in columHRList" :key="dict.id" :label="dict.columnName" :value="dict.id" />
  156. </el-select>
  157. </el-form-item>
  158. </el-col>
  159. <el-col :span="8">
  160. <el-form-item label="缺省值:" prop="defaultValue">
  161. <el-input v-model="formZd.defaultValue" placeholder="请输入缺省值" />
  162. </el-form-item>
  163. </el-col>
  164. </el-row>
  165. <el-row>
  166. <el-col :span="8">
  167. <el-form-item label="行数:" prop="numRows">
  168. <el-input-number style="width: 100%;" v-model="formZd.numRows" placeholder="请输入行数" />
  169. </el-form-item>
  170. </el-col>
  171. <el-col :span="8">
  172. <el-form-item label="列数:" prop="numColumns">
  173. <el-input-number style="width: 100%;" v-model="formZd.numColumns" placeholder="请输入列数" />
  174. </el-form-item>
  175. </el-col>
  176. <el-col :span="8">
  177. <el-form-item label="字段翻译器:" prop="fieldTranslator">
  178. <el-input v-model="formZd.fieldTranslator" placeholder="请输入字段翻译器" />
  179. </el-form-item>
  180. </el-col>
  181. </el-row>
  182. <el-row>
  183. <el-col :span="8">
  184. <el-form-item label="扩展属性:" prop="extendedAttributes">
  185. <el-input v-model="formZd.extendedAttributes" placeholder="请输入扩展属性" />
  186. </el-form-item>
  187. </el-col>
  188. <el-col :span="8">
  189. <el-form-item label="查询方式:" prop="queryType">
  190. <el-select style="width: 100%;" v-model="formZd.queryType">
  191. <el-option label="=" value="EQ" />
  192. <el-option label="!=" value="NE" />
  193. <el-option label=">" value="GT" />
  194. <el-option label=">=" value="GTE" />
  195. <el-option label="<" value="LT" />
  196. <el-option label="<=" value="LTE" />
  197. <el-option label="LIKE" value="LIKE" />
  198. <el-option label="BETWEEN" value="BETWEEN" />
  199. </el-select>
  200. </el-form-item>
  201. </el-col>
  202. <el-col :span="8">
  203. <el-form-item label="显示类型:" prop="htmlType">
  204. <el-select style="width: 100%;" v-model="formZd.htmlType">
  205. <el-option label="文本框" value="input" />
  206. <el-option label="文本域" value="textarea" />
  207. <el-option label="下拉框" value="select" />
  208. <el-option label="单选框" value="radio" />
  209. <el-option label="复选框" value="checkbox" />
  210. <el-option label="日期控件" value="datetime" />
  211. <el-option label="图片上传" value="imageUpload" />
  212. <el-option label="文件上传" value="fileUpload" />
  213. <el-option label="富文本控件" value="editor" />
  214. <el-option label="hr" value="hr" />
  215. </el-select>
  216. </el-form-item>
  217. </el-col>
  218. </el-row>
  219. <el-row>
  220. <el-col :span="8">
  221. <el-form-item label="字典类型:" prop="dictType">
  222. <template slot-scope="scope">
  223. <el-select style="width: 100%;" v-model="formZd.dictType" clearable filterable placeholder="请选择">
  224. <el-option v-for="dict in dictOptions" :key="dict.dictType" :label="dict.dictName" :value="dict.dictType">
  225. <span style="float: left">{{ dict.dictName }}</span>
  226. <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
  227. </el-option>
  228. </el-select>
  229. </template>
  230. </el-form-item>
  231. </el-col>
  232. <el-col :span="8">
  233. <el-form-item label="单据编号规则:" prop="seqName">
  234. <el-input v-model="formZd.seqName" placeholder="请输入单据编号规则" />
  235. </el-form-item>
  236. </el-col>
  237. <el-col :span="8">
  238. <el-form-item label="显示字段" prop="isOut">
  239. <el-checkbox true-label="Y" false-label="N" v-model="formZd.isOut"></el-checkbox>
  240. </el-form-item>
  241. </el-col>
  242. </el-row>
  243. <el-row>
  244. <el-col :span="8">
  245. <el-form-item label="输入字段" prop="isIn">
  246. <el-checkbox true-label="Y" false-label="N" v-model="formZd.isIn"></el-checkbox>
  247. </el-form-item>
  248. </el-col>
  249. <el-col :span="8">
  250. <el-form-item label="查询条件" prop="isQuery">
  251. <el-checkbox true-label="1" false-label="0" v-model="formZd.isQuery"></el-checkbox>
  252. </el-form-item>
  253. </el-col>
  254. <el-col :span="8">
  255. <el-form-item label="必填" prop="isRequired">
  256. <el-checkbox true-label="1" false-label="0" v-model="formZd.isRequired"></el-checkbox>
  257. </el-form-item>
  258. </el-col>
  259. </el-row>
  260. </el-form>
  261. <div slot="footer" class="dialog-footer">
  262. <el-button type="primary" @click="submitFormZd">确 定</el-button>
  263. <el-button @click="cancel">取 消</el-button>
  264. </div>
  265. </el-dialog>
  266. </el-tab-pane>
  267. <!-- <el-tab-pane label="生成信息" name="genInfo">
  268. <gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus"/>
  269. </el-tab-pane> -->
  270. <el-tab-pane label="关联表" name="genInfo">
  271. <el-row style="margin-bottom: 20px;" type="flex" :gutter="10" justify="end">
  272. <el-col :span="1.5">
  273. <el-button @click="handleAdd_gl" icon="el-icon-plus" size="mini" style="background-color: #FFE9ED;color: #E58481;border: 1px solid #E58481;">新增</el-button>
  274. </el-col>
  275. <el-col :span="1.5">
  276. <el-button icon="el-icon-delete" @click="handleDel_gl" size="mini" style="background-color: #FFD6B0;color: #EA551A;border: 1px solid #F4AD6B;"
  277. :disabled="multiple1">删除</el-button>
  278. </el-col>
  279. </el-row>
  280. <el-table ref="dragTable" @row-dblclick="dbSelected" v-loading="loading" :data="postList" row-key="columnId"
  281. align="center" :max-height="tableHeight" @selection-change="handleSelectionChange1">
  282. <el-table-column type="selection" width="55" align="center" />
  283. <el-table-column label="id" width="60" align="center" prop="id" />
  284. <el-table-column label="可用" align="center" prop="isDel">
  285. <template slot-scope="scope">
  286. <el-checkbox true-label="Y" disabled false-label="N" v-model="scope.row.isDel"></el-checkbox>
  287. </template>
  288. </el-table-column>
  289. <el-table-column label="序号" align="center" prop="sort" />
  290. <el-table-column label="描述" align="center" prop="description" />
  291. <el-table-column label="关联表" align="center" prop="tableName" />
  292. <el-table-column label="字段(关联到主表PK)" width="160px" align="center" prop="columnName" />
  293. <el-table-column label="显示条件" align="center" prop="displayConditions" />
  294. <el-table-column label="关联方式" align="center" prop="relationType">
  295. <template slot-scope="scope">
  296. {{scope.row.relationType | relationTypeFn}}
  297. </template>
  298. </el-table-column>
  299. <el-table-column label="内嵌编辑" align="center" prop="embedEdit">
  300. <template slot-scope="scope">
  301. {{scope.row.embedEdit | embedEditFn}}
  302. </template>
  303. </el-table-column>
  304. <el-table-column label="修改人" align="center" prop="updateBy" />
  305. <el-table-column label="修改时间" align="center" prop="updateTime" />
  306. </el-table>
  307. <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
  308. @pagination="tabList" />
  309. </el-tab-pane>
  310. <el-tab-pane label="数据库SQL" name="genSql">
  311. <el-row type="flex" justify="end">
  312. <el-button @click="zxCreaBtn" size="mini" style="background-color: #FFE9ED;color: #E58481;border: 1px solid #E58481;">执行创建语句</el-button>
  313. <el-button @click="sxCreaBtn" size="mini" style="background-color: #FFD6B0;color: #EA551A;border: 1px solid #F4AD6B;">刷新创建语句</el-button>
  314. </el-row>
  315. <el-form>
  316. <el-form-item label="创建语句:" style="margin-top: 20px;">
  317. <el-input class="resizeNone" v-model="tableSqlData.createSql" type="textarea" />
  318. </el-form-item>
  319. <el-form-item label="修改日志:">
  320. <el-input class="resizeNone" v-model="tableSqlData.createLog" type="textarea" />
  321. </el-form-item>
  322. </el-form>
  323. </el-tab-pane>
  324. </el-tabs>
  325. <!-- 添加或修改岗位对话框 -->
  326. <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
  327. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  328. <el-form-item label="描述:" prop="postName">
  329. <el-input v-model="form.description" placeholder="请输入描述" />
  330. </el-form-item>
  331. <el-form-item label="关联表:" prop="relationParentId">
  332. <el-select style="width: 100%;" v-model="form.relationParentId" placeholder="请选择关联表" @change="relationFn"
  333. >
  334. <el-option v-for="item in tableList.rows" :key="item.id" :label="item.tableComment" :value="item.id">
  335. </el-option>
  336. </el-select>
  337. </el-form-item>
  338. <el-form-item label="字段:" prop="relationChildId">
  339. <el-select style="width: 100%;" v-model="form.relationChildId" placeholder="请选择字段">
  340. <el-option v-for="item in genList" v-if="item.foreignKey" :key="item.id" :label="item.columnName" :value="item.id">
  341. </el-option>
  342. </el-select>
  343. </el-form-item>
  344. <el-form-item label="显示条件:" prop="displayConditions">
  345. <el-input v-model="form.displayConditions" controls-position="right" placeholder="请输入显示条件" />
  346. </el-form-item>
  347. <el-form-item label="关联方式:" prop="relationType">
  348. <el-select style="width: 100%;" v-model="form.relationType" placeholder="请选择关联方式" clearable size="small">
  349. <el-option v-for="dict in relationType" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
  350. </el-select>
  351. </el-form-item>
  352. <el-form-item label="内嵌编辑:" prop="embedEdit">
  353. <el-select style="width: 100%;" v-model="form.embedEdit" placeholder="岗位状态" clearable size="small">
  354. <el-option v-for="dict in embedEdit" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
  355. </el-select>
  356. </el-form-item>
  357. <el-form-item label="序号:" prop="sort">
  358. <el-input-number style="width: 100%;" v-model="form.sort" controls-position="right" :min="0" />
  359. </el-form-item>
  360. <el-form-item label="是否可用:" prop="isDel">
  361. <el-checkbox true-label="Y" false-label="N" v-model="form.isDel"></el-checkbox>
  362. </el-form-item>
  363. </el-form>
  364. <div slot="footer" class="dialog-footer">
  365. <el-button type="primary" @click="addGlfn">确 定</el-button>
  366. <el-button @click="cancel">取 消</el-button>
  367. </div>
  368. </el-dialog>
  369. <!-- 快速搜索对话框 -->
  370. <el-dialog :close-on-click-modal="false" :title="titleopenquery" :visible.sync="openquery" width="1200px" append-to-body>
  371. <el-form ref="formquery" @row-dblclick="dbSelectedZd" :model="formquery" :rules="rules" label-width="100px">
  372. <dynamic-forms :type='0' :ref="item.columnName" :config="formquery.fixedData" @inputs = "changeFn" :formConfig="item" v-for="(item,index) in queryData.queryList" :key='index' />
  373. <el-form-item style="display: inline-block;">
  374. <el-button type="primary" @click="handleQuery">搜索</el-button>
  375. <el-button @click="openquery = false">取消</el-button>
  376. </el-form-item>
  377. </el-form>
  378. <el-table stripe @row-dblclick="tableBtn" :data="postListquery.rows" @selection-change="handleSelectionChange">
  379. <el-table-column :label="item.columnComment" align="center" :prop="item.columnName" v-for="(item,index) in postListquery.tableHeadList" :key="index" />
  380. </el-table>
  381. <pagination
  382. v-show="totalquery>0"
  383. :total="totalquery"
  384. :page.sync="aliemg.pageNo"
  385. :limit.sync="aliemg.pageSize"
  386. @pagination="getLisail"
  387. />
  388. </el-dialog>
  389. </el-card>
  390. </template>
  391. <script>
  392. import {
  393. getGenTable,
  394. updateGenTable,
  395. delPost,
  396. tabList,
  397. listTable,
  398. addGenTable,
  399. setGenTable,
  400. delGenTable,
  401. listAllColumnsByTableId,
  402. genTableColumnList,
  403. tableSql,
  404. zxImplement,
  405. getReload,
  406. addGenTableColumn,
  407. delGenTableColumn,
  408. setGenTableColumn,
  409. getGenTableColumn,
  410. getByIdWithForeignKey,
  411. listIndexfou,
  412. tableQuery,
  413. qurGenTable
  414. } from "@/api/tool/gen";
  415. import {
  416. optionselect as getDictOptionselect
  417. } from "@/api/system/dict/type";
  418. import {
  419. listMenu as getMenuTreeselect
  420. } from "@/api/system/menu";
  421. import basicInfoForm from "./basicInfoForm";
  422. import genInfoForm from "./genInfoForm";
  423. import Sortable from 'sortablejs'
  424. let _this = ''
  425. export default {
  426. name: "GenEdit",
  427. components: {
  428. basicInfoForm,
  429. genInfoForm
  430. },
  431. data() {
  432. _this = this
  433. return {
  434. ForeName: '',
  435. totalquery:0,
  436. // 多行查询
  437. titleopenquery:'快速查询',
  438. // 获取输入框的参数
  439. queryLisr:{
  440. table:'gen_table_column'
  441. },
  442. aliemg:{
  443. table:'gen_table_column',
  444. orderBy:'create_time desc',
  445. pageNo:1,
  446. pageSize:10,
  447. fixedData:{
  448. condition:''
  449. }
  450. },
  451. postListquery:{},
  452. queryData: {},
  453. openquery:false,
  454. formquery:{},
  455. // 字段信息
  456. tableSqlData: [],
  457. columList: [],
  458. columHRList: [],
  459. foreignKey: [],
  460. openZd: false,
  461. formZd: {
  462. },
  463. rulesZd: {
  464. columnName: [{
  465. required: true,
  466. message: "请输入字段名",
  467. trigger: "blur"
  468. }],
  469. columnComment: [{
  470. required: true,
  471. message: "请输入字段描述",
  472. trigger: "blur"
  473. }],
  474. columnType: [{
  475. required: true,
  476. message: "请输入物理类型",
  477. trigger: "blur"
  478. }],
  479. mask: [{
  480. required: true,
  481. message: "请输入字段显示规则",
  482. trigger: "blur"
  483. }],
  484. sort: [{
  485. required: true,
  486. message: "请输入序号",
  487. trigger: "blur"
  488. }],
  489. },
  490. loadingZd: '',
  491. // 关联表
  492. title: "",
  493. loading: false,
  494. open: false,
  495. form: {},
  496. rules: {
  497. relationParentId: [{
  498. required: true,
  499. message: "请选择关联表",
  500. trigger: "blur"
  501. }],
  502. relationChildId: [{
  503. required: true,
  504. message: "请选择字段",
  505. trigger: "blur"
  506. }],
  507. relationType: [{
  508. required: true,
  509. message: "请选择关联条件",
  510. trigger: "blur"
  511. }],
  512. },
  513. postList: [],
  514. total: 1,
  515. tableList: {},
  516. // 关联方式
  517. // 内嵌编辑
  518. genList: [],
  519. glbParams: {
  520. pageNum: 1,
  521. pageSize: 10000000,
  522. },
  523. // 关联表查询参数
  524. queryParams: {
  525. relationParentId: this.$route.params && this.$route.params.tableId,
  526. pageNum: 1,
  527. pageSize: 10,
  528. },
  529. // 选中选项卡的 name
  530. activeName: "basic",
  531. // 表格的高度
  532. tableHeight: document.documentElement.scrollHeight - 245 + "px",
  533. // 表信息
  534. tables: [],
  535. // 表列信息
  536. cloumns: [],
  537. // 字典信息
  538. dictOptions: [],
  539. // 菜单信息
  540. menus: [],
  541. // 表详细信息
  542. info: {},
  543. // 选中数组
  544. ids: [],
  545. ids1: [],
  546. // 非单个禁用
  547. single: true,
  548. single1: true,
  549. // 非多个禁用
  550. multiple: true,
  551. multiple1: true,
  552. // 关联方式
  553. relationType: [],
  554. // 内嵌编辑
  555. embedEdit: [],
  556. };
  557. },
  558. filters: {
  559. zdFn(data) {
  560. let is = ''
  561. for (let item of _this.columList) {
  562. if (item.columnId == data) {
  563. is = item.columnName
  564. }
  565. }
  566. return is
  567. },
  568. relationTypeFn(data) {
  569. let is = ''
  570. for (let item of _this.relationType) {
  571. if (item.dictValue == data) {
  572. is = item.dictLabel
  573. }
  574. }
  575. return is
  576. },
  577. embedEditFn(data) {
  578. let is = ''
  579. for (let item of _this.embedEdit) {
  580. if (item.dictValue == data) {
  581. is = item.dictLabel
  582. }
  583. }
  584. return is
  585. },
  586. },
  587. created() {
  588. const tableId = this.$route.params && this.$route.params.tableId;
  589. if (tableId) {
  590. // 获取表详细信息
  591. getGenTable(tableId).then(res => {
  592. this.cloumns = res.data.rows;
  593. this.info = res.data.info;
  594. console.log(this.info,33456)
  595. this.tables = res.data.tables;
  596. });
  597. //查询数据库sql
  598. tableSql(tableId).then(res => {
  599. if (res.data) {
  600. this.tableSqlData = res.data
  601. }
  602. })
  603. /** 查询字典下拉列表 */
  604. getDictOptionselect().then(response => {
  605. this.dictOptions = response.data;
  606. });
  607. // 关联HR字段
  608. genTableColumnList({
  609. tableId,
  610. htmlType: 'HR'
  611. }).then(response => {
  612. this.columHRList = response.rows;
  613. });
  614. // 关联字段
  615. listAllColumnsByTableId({
  616. id:tableId
  617. }).then(response => {
  618. this.columList = response.data;
  619. });
  620. // 关联表数据
  621. listTable(this.glbParams).then(response => {
  622. this.tableList = response;
  623. });
  624. /** 查询菜单下拉列表 */
  625. // getMenuTreeselect().then(response => {
  626. // this.menus = this.handleTree(response.data, "menuId");
  627. // });
  628. // 关联方式
  629. this.getDicts("relation_type").then(response => {
  630. this.relationType = response.data;
  631. });
  632. // 内嵌编辑
  633. this.getDicts("embed_edit").then(response => {
  634. this.embedEdit = response.data;
  635. });
  636. }
  637. this.tabList()
  638. },
  639. methods: {
  640. tableBtn(row){
  641. this.openquery = false
  642. this.ForeName = row.column_name
  643. this.formZd.foreignKey = row.id
  644. },
  645. fkzdFn() {
  646. this.queryedit()
  647. this.getLisail()
  648. this.openquery = true
  649. },
  650. changeFn(obj) {
  651. console.log(obj)
  652. for(let key in obj){
  653. this.formquery.fixedData[key] = obj[key]
  654. }
  655. },
  656. // 快速查询
  657. queryedit(){
  658. this.loading = true;
  659. tableQuery(this.queryLisr).then(response => {
  660. let data = response.data
  661. this.queryData = data
  662. this.loading = false;
  663. })
  664. },
  665. handleQuery(){
  666. for(let item of this.queryData.queryList){
  667. if(item.htmlType == 'checkbox' || item.htmlType == 'imageUpload' || item.htmlType == 'fileUpload'){
  668. this.formquery[item.columnName] = this.$refs[item.columnName][0].config
  669. } else{
  670. this.formquery[item.columnName] = this.$refs[item.columnName][0].config[item.columnName]
  671. }
  672. }
  673. this.aliemg.fixedData.condition = this.formquery
  674. this.getLisail()
  675. },
  676. // 快速查询列表
  677. getLisail() {
  678. this.loading = true;
  679. listIndexfou(this.aliemg).then(response => {
  680. if(response.data){
  681. // this.tableDataalid = response.data.tableHeadList;
  682. this.postListquery = response.data
  683. this.postListquery.rows.filter(route => {
  684. if(route.table_id){
  685. route.table_id = route.table_id.name
  686. }
  687. })
  688. this.totalquery = response.data.total;
  689. }
  690. this.loading = false;
  691. }
  692. );
  693. },
  694. submitFormZd() {
  695. this.$refs["formZd"].validate(valid => {
  696. if (valid) {
  697. const tableId = this.$route.params && this.$route.params.tableId;
  698. this.formZd.tableId = tableId
  699. if (this.formZd.id != undefined) {
  700. setGenTableColumn(this.formZd).then(response => {
  701. this.msgSuccess("修改成功");
  702. this.openZd = false;
  703. // 获取表详细信息
  704. getGenTable(tableId).then(res => {
  705. this.cloumns = res.data.rows;
  706. this.info = res.data.info;
  707. this.tables = res.data.tables;
  708. });
  709. });
  710. } else {
  711. addGenTableColumn(this.formZd).then(response => {
  712. this.msgSuccess("新增成功");
  713. this.openZd = false;
  714. // 获取表详细信息
  715. getGenTable(tableId).then(res => {
  716. this.cloumns = res.data.rows;
  717. this.info = res.data.info;
  718. this.tables = res.data.tables;
  719. });
  720. });
  721. }
  722. }
  723. });
  724. },
  725. sxCreaBtn() {
  726. const tableId = this.$route.params && this.$route.params.tableId
  727. getReload({
  728. tableId,
  729. createSql: this.tableSqlData.createSql,
  730. createLog: this.tableSqlData.createLog,
  731. id: this.tableSqlData.id
  732. }).then(res => {
  733. this.msgSuccess('刷新成功')
  734. //查询数据库sql
  735. tableSql(tableId).then(res => {
  736. if (res.data) {
  737. this.tableSqlData = res.data
  738. }
  739. })
  740. })
  741. },
  742. zxCreaBtn() {
  743. const _this = this
  744. this.$confirm('是否确认执行创建语句?', "警告", {
  745. confirmButtonText: "确定",
  746. cancelButtonText: "取消",
  747. type: "warning"
  748. }).then(function() {
  749. return zxImplement({
  750. tableId: _this.$route.params && _this.$route.params.tableId,
  751. createSql: _this.tableSqlData.createSql,
  752. createLog: _this.tableSqlData.createLog,
  753. id: _this.tableSqlData.id
  754. })
  755. }).then(res => {
  756. _this.msgSuccess('执行成功')
  757. })
  758. },
  759. dbSelectedZd(row) {
  760. this.reset();
  761. const id = row.id
  762. getByIdWithForeignKey(id).then(response => {
  763. let data = response.data
  764. data.foreignKey = data.foreignKey ? data.foreignKey - 0 : ''
  765. this.formZd = data;
  766. if(data.fkInfo){
  767. this.ForeName = data.fkInfo.value
  768. }
  769. this.openZd = true;
  770. this.title = "修改字段信息";
  771. });
  772. },
  773. dbSelected(row) {
  774. this.reset();
  775. const id = row.id
  776. qurGenTable(id).then(response => {
  777. let data = response.data
  778. data.relationType = data.relationType + ""
  779. data.embedEdit = data.embedEdit?(data.embedEdit + ""): data.embedEdit
  780. getGenTable(data.relationParentId).then(res => {
  781. this.genList = res.data.rows;
  782. this.form = data;
  783. this.open = true;
  784. this.title = "修改关联表";
  785. });
  786. });
  787. },
  788. addGlfn() {
  789. this.$refs["form"].validate(valid => {
  790. if (valid) {
  791. let datas = JSON.parse(JSON.stringify(this.form))
  792. datas.relationParentId = this.info.id
  793. console.log(datas,this.info.id,9998)
  794. if (this.form.id != undefined) {
  795. setGenTable(datas).then(response => {
  796. this.msgSuccess("修改成功");
  797. this.open = false;
  798. this.tabList();
  799. });
  800. } else {
  801. addGenTable(datas).then(response => {
  802. this.msgSuccess("新增成功");
  803. this.open = false;
  804. this.tabList();
  805. });
  806. }
  807. }
  808. });
  809. },
  810. relationFn(data) {
  811. getGenTable(data).then(res => {
  812. this.genList = res.data.rows;
  813. });
  814. },
  815. loadMore() {
  816. const _this = this
  817. let num = _this.tableList.total % 10 == 0 ? _this.tableList.total / 10 : ((_this.tableList.total - _this.tableList
  818. .total % 10) / 10 + 1)
  819. console.log(num, 1)
  820. if (this.glbParams.pageNum < num) {
  821. this.glbParams.pageNum++
  822. // 关联表数据
  823. listTable(this.glbParams).then(response => {
  824. let data = response
  825. data.rows = _this.tableList.rows.concat(data.rows)
  826. _this.tableList = data;
  827. });
  828. }
  829. },
  830. // 取消按钮
  831. cancel() {
  832. this.open = false;
  833. this.reset();
  834. this.openZd = false;
  835. this.resetZd();
  836. },
  837. // 关联表数据
  838. tabList() {
  839. this.loading = true;
  840. tabList(this.queryParams).then(response => {
  841. this.postList = response.rows;
  842. this.total = response.total;
  843. this.loading = false;
  844. });
  845. },
  846. /** 新增按钮操作 */
  847. handleAdd_gl() {
  848. this.reset();
  849. this.open = true;
  850. console.log(this.form)
  851. this.title = "新增关联表";
  852. },
  853. handleDel_gl(row) {
  854. const ids = row.id || this.ids1;
  855. this.$confirm('是否确认删除id为"' + ids + '"的数据项?', "警告", {
  856. confirmButtonText: "确定",
  857. cancelButtonText: "取消",
  858. type: "warning"
  859. }).then(function() {
  860. return delGenTable(ids);
  861. }).then(() => {
  862. this.tabList();
  863. this.msgSuccess("删除成功");
  864. })
  865. },
  866. // 表单重置
  867. reset() {
  868. this.form = {
  869. isDel: 'N'
  870. };
  871. this.resetForm("form");
  872. },
  873. resetZd() {
  874. this.formZd = {
  875. };
  876. this.resetForm("formZd");
  877. },
  878. /** 提交按钮 */
  879. submitForm() {
  880. let isInFlag = 0
  881. let isOutFlag = 0
  882. for(let item of this.cloumns){
  883. if(item.isIn=='Y'){
  884. isInFlag++
  885. }
  886. if(item.isOut=='Y'){
  887. isOutFlag++
  888. }
  889. }
  890. if(isInFlag>1){
  891. this.msgError('"输入字段"最多只能选择一个!')
  892. return
  893. }
  894. if(isOutFlag>1){
  895. this.msgError('"显示字段"最多只能选择一个!')
  896. return
  897. }
  898. const basicForm = this.$refs.basicInfo.$refs.basicInfoForm;
  899. const tabnum = Object.assign({}, basicForm.model)
  900. console.log(tabnum.tableColumn,234)
  901. if(tabnum.tableColumn >4 ){
  902. this.msgError('列数最大只能输入4')
  903. return
  904. }
  905. if( tabnum.tableColumn <1){
  906. this.msgError('最小只能输入1')
  907. return
  908. }
  909. // const genForm = this.$refs.genInfo.$refs.genInfoForm;
  910. Promise.all([basicForm].map(this.getFormPromise)).then(res => {
  911. const validateResult = res.every(item => !!item);
  912. if (validateResult) {
  913. const genTable = Object.assign({}, basicForm.model);
  914. genTable.columns = this.cloumns;
  915. // genTable.params = {
  916. // treeCode: genTable.treeCode,
  917. // treeName: genTable.treeName,
  918. // treeParentCode: genTable.treeParentCode,
  919. // parentMenuId: genTable.parentMenuId
  920. // };
  921. console.log(genTable)
  922. if(this.activeName=='basic'){
  923. genTable.updateType ='1'
  924. }
  925. if(this.activeName=='cloum'){
  926. genTable.updateType ='2'
  927. }
  928. updateGenTable(genTable).then(res => {
  929. this.msgSuccess(res.msg);
  930. if (res.code === 200) {
  931. this.close();
  932. }
  933. });
  934. } else {
  935. this.msgError("表单校验未通过,请重新检查提交内容");
  936. }
  937. });
  938. },
  939. getFormPromise(form) {
  940. return new Promise(resolve => {
  941. form.validate(res => {
  942. resolve(res);
  943. });
  944. });
  945. },
  946. /** 关闭按钮 */
  947. close() {
  948. this.$store.dispatch("tagsView/delView", this.$route);
  949. this.$router.push({
  950. path: "/tool/gen",
  951. query: {
  952. t: Date.now()
  953. }
  954. })
  955. },
  956. // 多选框选中数据
  957. handleSelectionChange(selection) {
  958. this.ids = selection.map(item => item.id)
  959. this.single = selection.length != 1
  960. this.multiple = !selection.length
  961. },
  962. // 多选框选中数据
  963. handleSelectionChange1(selection) {
  964. this.ids1 = selection.map(item => item.id)
  965. this.single1 = selection.length != 1
  966. this.multiple1 = !selection.length
  967. },
  968. /** 删除按钮操作 */
  969. handleDelete(row) {
  970. const ids = row.id || this.ids;
  971. const tableId = this.$route.params && this.$route.params.tableId;
  972. this.$confirm('是否确认删除字段编号为"' + ids + '"的数据项?', "警告", {
  973. confirmButtonText: "确定",
  974. cancelButtonText: "取消",
  975. type: "warning"
  976. }).then(function() {
  977. return delGenTableColumn(ids);
  978. }).then(() => {
  979. // 获取表详细信息
  980. getGenTable(tableId).then(res => {
  981. this.cloumns = res.data.rows;
  982. this.info = res.data.info;
  983. this.tables = res.data.tables;
  984. });
  985. this.msgSuccess("删除成功");
  986. })
  987. },
  988. handleAdd() {
  989. this.resetZd();
  990. this.openZd = true;
  991. this.title = "新增字段信息";
  992. }
  993. },
  994. mounted() {
  995. const el = this.$refs.dragTable.$el.querySelectorAll(".el-table__body-wrapper > table > tbody")[0];
  996. const sortable = Sortable.create(el, {
  997. handle: ".allowDrag",
  998. onEnd: evt => {
  999. const targetRow = this.cloumns.splice(evt.oldIndex, 1)[0];
  1000. this.cloumns.splice(evt.newIndex, 0, targetRow);
  1001. for (let index in this.cloumns) {
  1002. this.cloumns[index].sort = parseInt(index) + 1;
  1003. }
  1004. }
  1005. });
  1006. }
  1007. };
  1008. </script>
  1009. <style lang="scss">
  1010. .pagination-container {
  1011. height: 35px;
  1012. }
  1013. .resizeNone {
  1014. width: 60vw;
  1015. border-radius: 3px;
  1016. .el-textarea__inner {
  1017. //el_input中的隐藏属性
  1018. resize: none; //主要是这个样式
  1019. height: 200px;
  1020. }
  1021. }
  1022. </style>