Vue.txt 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943
  1. <!--
  2. * @Descripttion: (${genTable.functionName}/${genTable.tableName})
  3. * @Author: (${replaceDto.Author})
  4. * @Date: (${replaceDto.AddTime})
  5. -->
  6. <template>
  7. <div>
  8. <el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent>
  9. $foreach(column in genTable.Columns)
  10. $set(labelName = "")
  11. $set(columnName = "")
  12. $set(numLabel = "")
  13. $if(column.IsQuery == true)
  14. $set(columnName = column.CsharpFieldFl)
  15. $if(column.ColumnComment != "")
  16. $set(labelName = column.ColumnComment)
  17. $else
  18. $set(labelName = column.CsharpFieldFl)
  19. $end
  20. $if(column.CsharpType == "int" || column.CsharpType == "long")
  21. $set(numLabel = ".number")
  22. $end
  23. $if(column.HtmlType == "month")
  24. <el-form-item label="$labelName" prop="${columnName}">
  25. <el-date-picker
  26. v-model="queryParams.${columnName}"
  27. type="month"
  28. value-format="YYYY-MM-DD"
  29. placeholder="请选择$labelName">
  30. </el-date-picker>
  31. </el-form-item>
  32. $elseif(column.HtmlType == "datetime")
  33. <el-form-item label="$labelName">
  34. <el-date-picker
  35. v-model="dateRange${column.CsharpField}"
  36. type="datetimerange"
  37. start-placeholder="开始日期"
  38. end-placeholder="结束日期"
  39. value-format="YYYY-MM-DD HH:mm:ss"
  40. :default-time="defaultTime"
  41. :shortcuts="dateOptions">
  42. </el-date-picker>
  43. </el-form-item>
  44. $elseif(column.HtmlType == "datePicker")
  45. <el-form-item label="$labelName">
  46. <el-date-picker
  47. style="width: 200px"
  48. v-model="dateRange${column.CsharpField}"
  49. type="daterange"
  50. value-format="YYYY-MM-DD HH:mm:ss"
  51. :default-time="defaultTime">
  52. </el-date-picker>
  53. </el-form-item>
  54. $elseif(column.HtmlType.Contains("select"))
  55. <el-form-item label="${labelName}" prop="${columnName}">
  56. <el-select clearable $if(column.HtmlType == "selectMulti")multiple$end v-model="queryParams.${columnName}" placeholder="请选择${labelName}">
  57. <el-option v-for="item in $if(column.DictType != "") options.${column.DictType} $else options.${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
  58. <span class="fl">{{ item.dictLabel }}</span>
  59. <span class="fr" style="color: var(--el-text-color-secondary);">{{ item.dictValue }}</span>
  60. </el-option>
  61. </el-select>
  62. </el-form-item>
  63. $elseif(column.HtmlType == "radio")
  64. <el-form-item label="${labelName}" prop="${columnName}">
  65. <el-radio-group v-model="queryParams.${columnName}">
  66. <el-radio>全部</el-radio>
  67. <el-radio v-for="item in $if(column.DictType != "") options.${column.DictType} $else options.${column.CsharpFieldFl}Options$end" :key="item.dictValue" :value="item.dictValue">{{item.dictLabel}}</el-radio>
  68. </el-radio-group>
  69. </el-form-item>
  70. $else
  71. <el-form-item label="${labelName}" prop="${columnName}">
  72. <el-input v-model${numLabel}="queryParams.${columnName}" placeholder="请输入${labelName}" />
  73. </el-form-item>
  74. $end
  75. $end
  76. $end
  77. <el-form-item>
  78. <el-button icon="search" type="primary" @click="handleQuery">{{ ${t}t('btn.search') }}</el-button>
  79. <el-button icon="refresh" @click="resetQuery">{{ ${t}t('btn.reset') }}</el-button>
  80. </el-form-item>
  81. </el-form>
  82. <!-- 工具区域 -->
  83. <el-row :gutter="15" class="mb10">
  84. $if(replaceDto.ShowBtnAdd)
  85. <el-col :span="1.5">
  86. <el-button type="primary" v-hasPermi="['${replaceDto.PermissionPrefix}:add']" plain icon="plus" @click="handleAdd">
  87. {{ ${t}t('btn.add') }}
  88. </el-button>
  89. </el-col>
  90. $end
  91. $if(replaceDto.ShowBtnMultiDel)
  92. <el-col :span="1.5">
  93. <el-button type="success" :disabled="single" v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" plain icon="edit" @click="handleUpdate">
  94. {{ ${t}t('btn.edit') }}
  95. </el-button>
  96. </el-col>
  97. <el-col :span="1.5">
  98. <el-button type="danger" :disabled="multiple" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" plain icon="delete" @click="handleDelete">
  99. {{ ${t}t('btn.delete') }}
  100. </el-button>
  101. </el-col>
  102. $end
  103. $if(replaceDto.ShowBtnTruncate)
  104. <el-col :span="1.5">
  105. <el-button type="danger" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" plain icon="delete" @click="handleClear">
  106. {{ ${t}t('btn.clean') }}
  107. </el-button>
  108. </el-col>
  109. $end
  110. $if(replaceDto.ShowBtnImport)
  111. <el-col :span="1.5">
  112. <el-dropdown trigger="click" v-hasPermi="['${replaceDto.PermissionPrefix}:import']">
  113. <el-button type="primary" plain icon="Upload">
  114. {{ ${t}t('btn.import') }}<el-icon class="el-icon--right"><arrow-down /></el-icon>
  115. </el-button>
  116. <template #dropdown>
  117. <el-dropdown-menu>
  118. <el-dropdown-item command="upload">
  119. <importData
  120. templateUrl="${genTable.ModuleName}/${genTable.BusinessName}/importTemplate"
  121. importUrl="/${genTable.ModuleName}/${genTable.BusinessName}/importData"
  122. @success="handleFileSuccess"></importData>
  123. </el-dropdown-item>
  124. </el-dropdown-menu>
  125. </template>
  126. </el-dropdown>
  127. </el-col>
  128. $end
  129. $if(replaceDto.ShowBtnExport)
  130. <el-col :span="1.5">
  131. <el-button type="warning" plain icon="download" @click="handleExport" v-hasPermi="['${replaceDto.PermissionPrefix}:export']">
  132. {{ ${t}t('btn.export') }}
  133. </el-button>
  134. </el-col>
  135. $end
  136. <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
  137. </el-row>
  138. <el-table
  139. :data="dataList"
  140. v-loading="loading"
  141. ref="table"
  142. border
  143. header-cell-class-name="el-table-header-cell"
  144. highlight-current-row
  145. @sort-change="sortChange"
  146. $if(replaceDto.ShowBtnMultiDel)
  147. @selection-change="handleSelectionChange"
  148. $end
  149. >
  150. $if(replaceDto.ShowBtnMultiDel)
  151. <el-table-column type="selection" width="50" align="center"/>
  152. $end
  153. $if(sub)
  154. <el-table-column align="center" width="90">
  155. <template #default="scope">
  156. <el-button text @click="rowClick(scope.row)">{{ ${t}t('btn.details') }}</el-button>
  157. </template>
  158. </el-table-column>
  159. $end
  160. $foreach(column in genTable.Columns)
  161. $set(labelName = column.ColumnComment)
  162. $set(showToolTipHtml = "")
  163. $set(columnName = column.CsharpFieldFl)
  164. $if(column.CsharpType == "string" || column.HtmlType == "datetime")
  165. $set(showToolTipHtml = " :show-overflow-tooltip=\"true\"")
  166. $end
  167. $if(column.IsList == true)
  168. $if(column.HtmlType == "customInput" && column.IsPk == false)
  169. <el-table-column prop="${columnName}" label="${labelName}" width="90" sortable align="center" v-if="columns.showColumn('${columnName}')">
  170. <template #default="scope">
  171. <span v-show="editIndex != scope.$${index}index" @click="editCurrRow(scope.$${index}index)">{{scope.row.${columnName}}}</span>
  172. <el-input
  173. :ref="setColumnsRef"
  174. v-show="(editIndex == scope.$${index}index)"
  175. v-model="scope.row.${columnName}"
  176. @blur="handleChangeSort(scope.row)"></el-input>
  177. </template>
  178. </el-table-column>
  179. $elseif(column.HtmlType == "imageUpload")
  180. <el-table-column prop="${columnName}" label="${labelName}" align="center" v-if="columns.showColumn('${columnName}')">
  181. <template #default="scope">
  182. <ImagePreview :src="scope.row.${columnName}"></ImagePreview>
  183. </template>
  184. </el-table-column>
  185. $elseif(column.HtmlType == "checkbox" || column.HtmlType.Contains("select") || column.HtmlType == "radio")
  186. <el-table-column prop="${columnName}" label="${labelName}" align="center"${column.sortStr} v-if="columns.showColumn('${columnName}')">
  187. <template #default="scope">
  188. <dict-tag :options="$if(column.DictType != "") options.${column.DictType} $else options.${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName}" $if(column.HtmlType == "checkbox" || column.HtmlType == "selectMulti")split=","$end />
  189. </template>
  190. </el-table-column>
  191. $elseif(column.HtmlType == "datetime")
  192. <el-table-column prop="${columnName}" label="${labelName}" :show-overflow-tooltip="true" ${column.sortStr} v-if="columns.showColumn('${columnName}')"/>
  193. $else
  194. <el-table-column prop="${columnName}" label="${labelName}" align="center"${showToolTipHtml}${column.sortStr} v-if="columns.showColumn('${columnName}')"/>
  195. $end
  196. $end
  197. $end
  198. <el-table-column label="操作" width="160">
  199. <template #default="scope">
  200. $if(replaceDto.OperBtnStyle == 2)
  201. <el-button-group>
  202. $if(replaceDto.ShowBtnView)
  203. <el-button text type="primary" icon="view" @click="handlePreview(scope.row)"></el-button>
  204. $end
  205. $if(replaceDto.ShowBtnEdit)
  206. <el-button text v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" type="success" icon="edit" title="编辑" @click="handleUpdate(scope.row)"></el-button>
  207. $end
  208. $if(replaceDto.ShowBtnDelete)
  209. <el-button text v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" type="danger" icon="delete" title="删除" @click="handleDelete(scope.row)"></el-button>
  210. $end
  211. </el-button-group>
  212. $else
  213. $if(replaceDto.ShowBtnView)
  214. <el-button type="primary" size="small" icon="view" title="详情" @click="handlePreview(scope.row)"></el-button>
  215. $end
  216. $if(replaceDto.ShowBtnEdit)
  217. <el-button type="success" size="small" icon="edit" title="编辑" v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" @click="handleUpdate(scope.row)"></el-button>
  218. $end
  219. $if(replaceDto.ShowBtnDelete)
  220. <el-button type="danger" size="small" icon="delete" title="删除" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" @click="handleDelete(scope.row)"></el-button>
  221. $end
  222. $end
  223. </template>
  224. </el-table-column>
  225. </el-table>
  226. <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
  227. $* 一对一/一对多列表显示详情 *$
  228. $if(sub)
  229. <el-drawer v-model="drawer" size="50%" direction="rtl">
  230. <el-table :data="$tool.FirstLowerCase(genTable.SubTable.ClassName)List" header-row-class-name="text-navy">
  231. <el-table-column label="序号" type="index" width="80" />
  232. $foreach(column in genSubTable.Columns)
  233. $set(columnName = column.CsharpFieldFl)
  234. $if(column.IsList == true)
  235. $if(column.HtmlType == "checkbox" || column.HtmlType.Contains("select") || column.HtmlType == "radio")
  236. <el-table-column prop="${columnName}" label="${column.ColumnComment}">
  237. <template #default="scope">
  238. <dict-tag :options="$if(column.DictType != "") options.${column.DictType} $else options.${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName}" $if(column.HtmlType == "checkbox")split=","$end />
  239. </template>
  240. </el-table-column>
  241. $else
  242. <el-table-column prop="${column.CsharpFieldFl}" label="${column.ColumnComment}"/>
  243. $end
  244. $end
  245. $end
  246. </el-table>
  247. </el-drawer>
  248. $end
  249. <el-dialog :title="title" :lock-scroll="false" v-model="open" ${if(sub)}:fullscreen="fullScreen"$end>
  250. <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
  251. <el-row :gutter="20">
  252. $foreach(column in genTable.Columns)
  253. $set(columnName = column.CsharpFieldFl)
  254. $set(value = "item.dictValue")
  255. $set(number = "")
  256. $set(labelName = column.ColumnComment)
  257. $if(column.CsharpType == "int" || column.CsharpType == "long")
  258. $set(value = "parseInt(item.dictValue)")
  259. $set(number = ".number")
  260. $set(switchType = ":active-value='1' :inactive-value='0'")
  261. $end
  262. $if(column.IsEdit)
  263. $if(column.IsPK || column.IsIncrement)
  264. $if(column.IsPK && column.IsIncrement == false && replaceDto.useSnowflakeId == false)
  265. <el-col :lg="${options.ColNum}">
  266. <el-form-item label="${labelName}" prop="${columnName}">
  267. <el-input v-model${number}="form.${columnName}" placeholder="请输入${labelName}" :disabled="opertype != 1"/>
  268. </el-form-item>
  269. </el-col>
  270. $else
  271. <el-col :lg="${options.ColNum}" v-if="opertype != 1">
  272. <el-form-item label="${labelName}" prop="${columnName}">
  273. <el-input-number v-model.number="form.${columnName}" controls-position="right" placeholder="请输入${labelName}" :disabled="true"/>
  274. </el-form-item>
  275. </el-col>
  276. $end
  277. $else
  278. $if(column.HtmlType == "inputNumber" || column.HtmlType == "customInput")
  279. <el-col :lg="${options.ColNum}">
  280. <el-form-item label="${labelName}" prop="${columnName}">
  281. <el-input-number v-model.number="form.${columnName}" :controls="true" controls-position="right" placeholder="请输入${labelName}" ${column.DisabledStr}/>
  282. </el-form-item>
  283. </el-col>
  284. $elseif(column.HtmlType == "datetime" || column.HtmlType == "month")
  285. <el-col :lg="${options.ColNum}">
  286. <el-form-item label="${labelName}" prop="${columnName}">
  287. <el-date-picker
  288. v-model="form.${columnName}"
  289. type="datetime"
  290. placeholder="选择日期时间"${column.DisabledStr}
  291. value-format="YYYY-MM-DD HH:mm:ss">
  292. </el-date-picker>
  293. </el-form-item>
  294. </el-col>
  295. $elseif(column.HtmlType == "imageUpload")
  296. <el-col :lg="24">
  297. <el-form-item label="${labelName}" prop="${columnName}">
  298. <UploadImage v-model="form.${columnName}" :data="{ uploadType: 1 }" />
  299. </el-form-item>
  300. </el-col>
  301. $elseif(column.HtmlType == "fileUpload")
  302. <el-col :lg="24">
  303. <el-form-item label="${labelName}" prop="${columnName}">
  304. <UploadFile v-model="form.${columnName}" :data="{ uploadType: 1 }" />
  305. </el-form-item>
  306. </el-col>
  307. $elseif(column.HtmlType == "radio" || column.HtmlType == "selectRadio")
  308. <el-col :lg="${options.ColNum}">
  309. <el-form-item label="${labelName}" prop="${columnName}">
  310. <el-radio-group v-model="form.${columnName}"${column.DisabledStr}>
  311. <el-radio v-for="item in ${if(column.DictType != "")}options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end" :key="item.dictValue" :value="${value}">
  312. {{item.dictLabel}}
  313. </el-radio>
  314. </el-radio-group>
  315. </el-form-item>
  316. </el-col>
  317. $elseif(column.HtmlType == "textarea")
  318. <el-col :lg="24">
  319. <el-form-item label="${labelName}" prop="${columnName}">
  320. <el-input type="textarea" v-model="form.${columnName}" placeholder="请输入${labelName}"${column.DisabledStr}/>
  321. </el-form-item>
  322. </el-col>
  323. $elseif(column.HtmlType == "editor")
  324. <el-col :lg="24">
  325. <el-form-item label="${labelName}" prop="${columnName}">
  326. <editor v-model="form.${columnName}" :min-height="200" />
  327. </el-form-item>
  328. </el-col>
  329. $elseif(column.HtmlType == "slider")
  330. <el-col :lg="24">
  331. <el-form-item label="${labelName}" prop="${columnName}">
  332. <el-slider v-model="form.${columnName}" />
  333. </el-form-item>
  334. </el-col>
  335. $elseif(column.HtmlType == "select" || column.HtmlType == "selectMulti")
  336. <el-col :lg="${options.ColNum}">
  337. <el-form-item label="${labelName}" prop="${columnName}$if(column.HtmlType == "selectMulti")Checked$end">
  338. <el-select v-model="form.${columnName}$if(column.HtmlType == "selectMulti")Checked$end" $if(column.HtmlType == "selectMulti")multiple$end placeholder="请选择${labelName}"${column.DisabledStr}>
  339. <el-option
  340. v-for="item in $if(column.DictType != "")options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end"
  341. :key="item.dictValue"
  342. :label="item.dictLabel"
  343. :value="${value}"></el-option>
  344. </el-select>
  345. </el-form-item>
  346. </el-col>
  347. $elseif(column.HtmlType == "checkbox")
  348. <el-col :lg="24">
  349. <el-form-item label="${labelName}" prop="${columnName}">
  350. <el-checkbox-group v-model="form.${columnName}Checked"${column.DisabledStr}>
  351. <el-checkbox v-for="item in $if(column.DictType != "")options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictValue">
  352. {{item.dictLabel}}
  353. </el-checkbox>
  354. </el-checkbox-group>
  355. </el-form-item>
  356. </el-col>
  357. $elseif(column.HtmlType == "colorPicker")
  358. <el-col :lg="12">
  359. <el-form-item label="${labelName}" prop="${columnName}">
  360. <el-color-picker v-model="form.${columnName}" />
  361. </el-form-item>
  362. </el-col>
  363. $elseif(column.HtmlType == "switch")
  364. <el-col :lg="12">
  365. <el-form-item label="${labelName}" prop="${columnName}">
  366. <el-switch v-model="form.${columnName}" ${switchType} />
  367. </el-form-item>
  368. </el-col>
  369. $else
  370. <el-col :lg="${options.ColNum}">
  371. <el-form-item label="${labelName}" prop="${columnName}">
  372. <el-input v-model${number}="form.${columnName}" placeholder="请输入${labelName}" ${column.DisabledStr}/>
  373. </el-form-item>
  374. </el-col>
  375. $end
  376. $end
  377. $end
  378. $end
  379. </el-row>
  380. $* 子表信息 *$
  381. $if(sub)
  382. <el-divider content-position="center">${genTable.SubTable.FunctionName}信息</el-divider>
  383. <el-row :gutter="10" class="mb8">
  384. <el-col :span="1.5">
  385. <el-button type="primary" icon="Plus" @click="handleAdd${genTable.SubTable.ClassName}">添加</el-button>
  386. </el-col>
  387. <el-col :span="1.5">
  388. <el-button type="danger" icon="Delete" @click="handleDelete${genTable.SubTable.ClassName}">删除</el-button>
  389. </el-col>
  390. <el-col :span="1.5">
  391. <el-button type="info" icon="FullScreen" @click="fullScreen = !fullScreen">{{ fullScreen ? '退出全屏' : '全屏' }}</el-button>
  392. </el-col>
  393. </el-row>
  394. <el-table :data="${tool.FirstLowerCase(genTable.SubTable.ClassName)}List" :row-class-name="row${genTable.SubTable.ClassName}Index" @selection-change="handle${genTable.SubTable.ClassName}SelectionChange" ref="${genTable.SubTable.ClassName}Ref">
  395. <el-table-column type="selection" width="40" align="center" />
  396. <el-table-column label="序号" align="center" prop="index" width="50"/>
  397. $foreach(column in genTable.SubTable.Columns)
  398. $set(labelName = column.ColumnComment)
  399. $set(columnName = column.CsharpFieldFl)
  400. $set(value = "item.dictValue")
  401. $if(column.CsharpType == "int" || column.CsharpType == "long")
  402. $set(value = "parseInt(item.dictValue)")
  403. $set(number = ".number")
  404. $set(switchType = ":active-value='1' :inactive-value='0'")
  405. $end
  406. $if(column.IsList == true)
  407. $if(column.IsPk || column.CsharpField == genTable.SubTableFkName)
  408. $elseif(column.HtmlType == "inputNumber" || column.HtmlType == "customInput")
  409. <el-table-column label="${labelName}" align="center" prop="${columnName}" width="140">
  410. <template #default="scope">
  411. <el-input-number v-model="scope.row.${columnName}" controls-position="right" placeholder="请输入${labelName}" />
  412. </template>
  413. </el-table-column>
  414. $elseif(column.HtmlType == "datetime" || column.HtmlType == "month")
  415. <el-table-column label="${labelName}" align="center" prop="${columnName}">
  416. <template #default="scope">
  417. <el-date-picker clearable v-model="scope.row.${columnName}" type="date" placeholder="选择日期时间"></el-date-picker>
  418. </template>
  419. </el-table-column>
  420. $elseif(column.HtmlType == "radio" || column.HtmlType == "selectRadio" || column.HtmlType == "select" || column.HtmlType == "selectMulti")
  421. <el-table-column label="${labelName}" prop="${columnName}">
  422. <template #default="scope">
  423. <el-select v-model="scope.row.${columnName}" placeholder="请选择${labelName}"${column.DisabledStr}>
  424. <el-option
  425. v-for="item in $if(column.DictType != "")options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end"
  426. :key="item.dictValue"
  427. :label="item.dictLabel"
  428. :value="${value}"></el-option>
  429. </el-select>
  430. </template>
  431. </el-table-column>
  432. $elseif(column.HtmlType == "switch")
  433. <el-table-column label="${labelName}" prop="${columnName}">
  434. <template #default="scope">
  435. <el-switch v-model="scope.row.${columnName}" ${switchType} />
  436. </template>
  437. </el-table-column>
  438. $elseif(column.HtmlType == "imageUpload")
  439. <el-table-column label="${labelName}" prop="${columnName}">
  440. <template #default="scope">
  441. <UploadImage v-model="form.${columnName}" :isShowTip="false" :style="{ 'width': '50px' }" :data="{ uploadType: 1 }" />
  442. </template>
  443. </el-table-column>
  444. $else
  445. <el-table-column label="${labelName}" align="center" prop="${columnName}">
  446. <template #default="scope">
  447. <el-input v-model="scope.row.${columnName}" placeholder="请输入${labelName}" />
  448. </template>
  449. </el-table-column>
  450. $end
  451. $end
  452. $end
  453. </el-table>
  454. $end
  455. </el-form>
  456. <template #footer v-if="opertype != 3">
  457. <el-button text @click="cancel">{{ ${t}t('btn.cancel') }}</el-button>
  458. $if(replaceDto.ShowBtnEdit || replaceDto.ShowBtnAdd)
  459. <el-button type="primary" :loading="state.submitLoading" @click="submitForm">{{ ${t}t('btn.submit') }}</el-button>
  460. $end
  461. </template>
  462. </el-dialog>
  463. </div>
  464. </template>
  465. <script setup name="${genTable.BusinessName.ToLower()}">
  466. import { list${genTable.BusinessName},
  467. $if(replaceDto.ShowBtnAdd) add${genTable.BusinessName}, $end
  468. $if(replaceDto.ShowBtnDelete || replaceDto.ShowBtnMultiDel)del${genTable.BusinessName},$end
  469. $if(replaceDto.ShowBtnEdit) update${genTable.BusinessName},$end
  470. get${genTable.BusinessName},
  471. $if(replaceDto.ShowBtnTruncate) clear${genTable.BusinessName}, $end
  472. $if(showCustomInput) changeSort $end }
  473. from '@/api/${tool.FirstLowerCase(genTable.ModuleName)}/${genTable.BusinessName.ToLower()}.js'
  474. $if(replaceDto.ShowEditor == 1)
  475. import Editor from '@/components/Editor'
  476. $end
  477. $if(replaceDto.ShowBtnImport)
  478. import importData from '@/components/ImportData'
  479. $end
  480. const { proxy } = getCurrentInstance()
  481. const ids = ref([])
  482. const loading = ref(false)
  483. const showSearch = ref(true)
  484. const queryParams = reactive({
  485. pageNum: 1,
  486. pageSize: 10,
  487. sort: '${genTable.Options.SortField}',
  488. sortType: '${genTable.Options.SortType}',
  489. $foreach(item in genTable.Columns)
  490. $if(item.IsQuery == true)
  491. ${item.CsharpFieldFl}: undefined,
  492. $end
  493. $end
  494. })
  495. const columns = ref([
  496. $set(index = 0)
  497. $foreach(column in genTable.Columns)
  498. $set(index = index + 1)
  499. $set(showToolTipHtml = "")
  500. $set(type = "")
  501. $set(align = "center")
  502. $if(column.CsharpType == "string" || column.HtmlType == "datetime")
  503. $set(showToolTipHtml = " ,showOverflowTooltip: true")
  504. $end
  505. $if(column.HtmlType == "imageUpload")
  506. $set(type = "img")
  507. $set(align = "center")
  508. $elseif(column.HtmlType == "checkbox" || column.HtmlType.Contains("select") || column.HtmlType == "radio")
  509. $set(type = "dict")
  510. $set(align = "center")
  511. $end
  512. $if(column.IsList)
  513. { visible: ${if(index < 9)}true${else}false${end}, align: '${align}', type: '${type}', prop: '${column.CsharpFieldFl}', label: '${column.ColumnComment}' ${showToolTipHtml} $if(column.DictType != "") ,dictType: '${column.DictType}'$end },
  514. $end
  515. $end
  516. //{ visible: false, prop: 'actions', label: '操作', type: 'slot', width: '160' }
  517. ])
  518. const total = ref(0)
  519. const dataList = ref([])
  520. const queryRef = ref()
  521. const defaultTime = ref([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)])
  522. $foreach(item in genTable.Columns)
  523. $if((item.HtmlType == "datetime" || item.HtmlType == "datePicker") && item.IsQuery == true)
  524. // ${item.ColumnComment}时间范围
  525. const dateRange${item.CsharpField} = ref([])
  526. $elseif(item.HtmlType == "customInput")
  527. /******************自定义编辑 start **********************/
  528. const editIndex = ref(-1)
  529. const columnRefs = ref([])
  530. const setColumnsRef = (el) => {
  531. if (el) {
  532. columnRefs.value.push(el)
  533. }
  534. }
  535. // 显示编辑排序
  536. function editCurrRow(index) {
  537. editIndex.value = index
  538. setTimeout(() => {
  539. columnRefs.value[index].focus()
  540. }, 100)
  541. }
  542. // 保存排序
  543. function handleChangeSort(info) {
  544. editIndex.value = -1
  545. proxy
  546. .${confirm}confirm('是否保存数据?')
  547. .then(function () {
  548. return changeSort({ value: info.${item.CsharpFieldFl}, id: info.${replaceDto.FistLowerPk} })
  549. })
  550. .then(() => {
  551. handleQuery()
  552. proxy.${modal}modal.msgSuccess('修改成功')
  553. })
  554. }
  555. /******************自定义编辑 end **********************/
  556. $end
  557. $end
  558. $set(index = 0)
  559. var dictParams = [
  560. $foreach(item in dicts)
  561. $if(item.DictType != "")
  562. "${item.DictType}",
  563. $set(index = index + 1)
  564. $end
  565. $end
  566. ]
  567. $if(index > 0)
  568. proxy.getDicts(dictParams).then((response) => {
  569. response.data.forEach((element) => {
  570. state.options[element.dictType] = element.list
  571. })
  572. })
  573. $end
  574. function getList(){
  575. $foreach(item in genTable.Columns)
  576. $if((item.HtmlType == "datetime" || item.HtmlType == "datePicker") && item.IsQuery == true)
  577. proxy.addDateRange(queryParams, dateRange${item.CsharpField}.value, '${item.CsharpField}');
  578. $end
  579. $end
  580. loading.value = true
  581. list${genTable.BusinessName}(queryParams).then(res => {
  582. const { code, data } = res
  583. if (code == 200) {
  584. dataList.value = data.result
  585. total.value = data.totalNum
  586. loading.value = false
  587. }
  588. })
  589. }
  590. // 查询
  591. function handleQuery() {
  592. queryParams.pageNum = 1
  593. getList()
  594. }
  595. // 重置查询操作
  596. function resetQuery(){
  597. $foreach(item in genTable.Columns)
  598. $if((item.HtmlType == "datetime" || item.HtmlType == "datePicker") && item.IsQuery == true)
  599. // ${item.ColumnComment}时间范围
  600. dateRange${item.CsharpField}.value = []
  601. $end
  602. $end
  603. proxy.resetForm("queryRef")
  604. handleQuery()
  605. }
  606. $if(replaceDto.ShowBtnMultiDel)
  607. // 多选框选中数据
  608. function handleSelectionChange(selection) {
  609. ids.value = selection.map((item) => item.${replaceDto.FistLowerPk});
  610. single.value = selection.length != 1
  611. multiple.value = !selection.length;
  612. }
  613. $end
  614. // 自定义排序
  615. function sortChange(column) {
  616. var sort = undefined
  617. var sortType = undefined
  618. if (column.prop != null && column.order != null) {
  619. sort = column.prop
  620. sortType = column.order
  621. $foreach(item in genTable.Columns)
  622. $if(item.IsSort && item.CsharpField.ToLower() != item.ColumnName.ToLower())
  623. if (column.prop == '${item.CsharpFieldFl}') {
  624. sort = '${item.ColumnName}'
  625. }
  626. $end
  627. ${end}
  628. }
  629. queryParams.sort = sort
  630. queryParams.sortType = sortType
  631. handleQuery()
  632. }
  633. /*************** form操作 ***************/
  634. const formRef = ref()
  635. const title = ref('')
  636. // 操作类型 1、add 2、edit 3、view
  637. const opertype = ref(0)
  638. const open = ref(false)
  639. const state = reactive({
  640. single: true,
  641. multiple: true,
  642. submitLoading: false,
  643. form: {},
  644. rules: {
  645. $foreach(column in genTable.Columns)
  646. $if(column.IsRequired && column.IsPk && replaceDto.useSnowflakeId)
  647. ${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end }],
  648. $elseif(column.IsRequired && column.IsIncrement == false)
  649. ${column.CsharpFieldFl}$if(column.HtmlType == "selectMulti")Checked$end: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end
  650. $if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number" $end }],
  651. $end
  652. $end
  653. },
  654. options: {
  655. $foreach(column in dicts)
  656. $if(column.HtmlType == "radio" || column.HtmlType.Contains("select") || column.HtmlType == "checkbox")
  657. //$if(column.ColumnComment != "") ${column.ColumnComment} $else ${column.CsharpFieldFl}$end选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
  658. $if(column.DictType != "")${column.DictType}$else${column.CsharpFieldFl}Options$end: [],
  659. $end
  660. $end
  661. }
  662. })
  663. const { form, rules, options, single, multiple } = toRefs(state)
  664. // 关闭dialog
  665. function cancel(){
  666. open.value = false
  667. reset()
  668. }
  669. // 重置表单
  670. function reset() {
  671. form.value = {
  672. $foreach(item in genTable.Columns)
  673. $if(item.HtmlType == "checkbox" || item.HtmlType == "selectMulti")
  674. ${item.CsharpFieldFl}Checked: [],
  675. $else
  676. $item.CsharpFieldFl: null,
  677. $end
  678. $end
  679. };
  680. $if(sub)
  681. ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = []
  682. $end
  683. proxy.resetForm("formRef")
  684. }
  685. $if(replaceDto.ShowBtnView)
  686. /**
  687. * 查看
  688. * @param {*} row
  689. */
  690. function handlePreview(row) {
  691. reset()
  692. const id = row.${replaceDto.FistLowerPk}
  693. get${genTable.BusinessName}(id).then((res) => {
  694. const { code, data } = res
  695. if (code == 200) {
  696. open.value = true
  697. title.value = '查看'
  698. opertype.value = 3
  699. form.value = {
  700. ...data,
  701. $foreach(item in genTable.Columns)
  702. $if(item.HtmlType == "checkbox" || item.HtmlType == "selectMulti")
  703. ${item.CsharpFieldFl}Checked: data.${item.CsharpFieldFl} ? data.${item.CsharpFieldFl}.split(',') : [],
  704. $end
  705. $end
  706. }
  707. $if(sub)
  708. ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = res.data.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav
  709. $end
  710. }
  711. })
  712. }
  713. $end
  714. $if(replaceDto.ShowBtnAdd)
  715. // 添加按钮操作
  716. function handleAdd() {
  717. reset();
  718. open.value = true
  719. state.submitLoading = false
  720. title.value = '添加${genTable.functionName}'
  721. opertype.value = 1
  722. }
  723. $end
  724. $if(replaceDto.ShowBtnEdit)
  725. // 修改按钮操作
  726. function handleUpdate(row) {
  727. reset()
  728. const id = row.${replaceDto.FistLowerPk} || ids.value
  729. get${genTable.BusinessName}(id).then((res) => {
  730. const { code, data } = res
  731. if (code == 200) {
  732. open.value = true
  733. title.value = '修改${genTable.functionName}'
  734. opertype.value = 2
  735. form.value = {
  736. ...data,
  737. $foreach(item in genTable.Columns)
  738. $if(item.HtmlType == "checkbox" || item.HtmlType == "selectMulti")
  739. ${item.CsharpFieldFl}Checked: data.${item.CsharpFieldFl} ? data.${item.CsharpFieldFl}.split(',') : [],
  740. $end
  741. $end
  742. }
  743. $if(sub)
  744. ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = res.data.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav
  745. $end
  746. }
  747. })
  748. }
  749. $end
  750. // 添加&修改 表单提交
  751. function submitForm() {
  752. proxy.${refs}refs["formRef"].validate((valid) => {
  753. if (valid) {
  754. state.submitLoading = true
  755. $foreach(item in genTable.Columns)
  756. $if(item.HtmlType == "checkbox" || item.HtmlType == "selectMulti")
  757. form.value.${item.CsharpFieldFl} = form.value.${item.CsharpFieldFl}Checked.toString();
  758. $end
  759. $end
  760. $if(sub)
  761. form.value.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav = ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value
  762. $end
  763. if (form.value.${replaceDto.FistLowerPk} != undefined && opertype.value === 2) {
  764. $if(replaceDto.ShowBtnEdit)
  765. update${genTable.BusinessName}(form.value).then((res) => {
  766. proxy.${modal}modal.msgSuccess("修改成功")
  767. open.value = false
  768. getList()
  769. })
  770. .finally(() => {
  771. state.submitLoading = false
  772. })
  773. $end
  774. } else {
  775. $if(replaceDto.ShowBtnAdd)
  776. add${genTable.BusinessName}(form.value).then((res) => {
  777. proxy.${modal}modal.msgSuccess("新增成功")
  778. open.value = false
  779. getList()
  780. })
  781. .finally(() => {
  782. setTimeout(() => {
  783. state.submitLoading = false
  784. }, 800)
  785. })
  786. $end
  787. }
  788. }
  789. })
  790. }
  791. $if(replaceDto.ShowBtnMultiDel || replaceDto.ShowBtnDelete)
  792. // 删除按钮操作
  793. function handleDelete(row) {
  794. const Ids = row.${replaceDto.FistLowerPk} || ids.value
  795. proxy
  796. .${confirm}confirm('是否确认删除参数编号为"' + Ids + '"的数据项?', "警告", {
  797. confirmButtonText: proxy.${t}t('common.ok'),
  798. cancelButtonText: proxy.${t}t('common.cancel'),
  799. type: "warning",
  800. })
  801. .then(function () {
  802. return del${genTable.BusinessName}(Ids)
  803. })
  804. .then(() => {
  805. getList()
  806. proxy.${modal}modal.msgSuccess("删除成功")
  807. })
  808. }
  809. $end
  810. $if(replaceDto.ShowBtnTruncate)
  811. // 清空
  812. function handleClear() {
  813. proxy
  814. .${confirm}confirm("是否确认清空所有数据项?", "警告", {
  815. confirmButtonText: proxy.${t}t('common.ok'),
  816. cancelButtonText: proxy.${t}t('common.cancel'),
  817. type: "warning",
  818. })
  819. .then(function () {
  820. return clear${genTable.BusinessName}()
  821. })
  822. .then(() => {
  823. handleQuery()
  824. proxy.${modal}modal.msgSuccess('清空成功')
  825. })
  826. }
  827. $end
  828. $if(replaceDto.ShowBtnImport)
  829. // 导入数据成功处理
  830. const handleFileSuccess = (response) => {
  831. const { item1, item2 } = response.data
  832. var error = ''
  833. item2.forEach((item) => {
  834. error += item.storageMessage + ','
  835. })
  836. proxy.${alert}alert(item1 + '<p>' + error + '</p>', '导入结果', {
  837. dangerouslyUseHTMLString: true
  838. })
  839. getList()
  840. }
  841. $end
  842. $if(replaceDto.ShowBtnExport)
  843. // 导出按钮操作
  844. function handleExport() {
  845. proxy
  846. .${confirm}confirm("是否确认导出${genTable.functionName}数据项?", "警告", {
  847. confirmButtonText: "确定",
  848. cancelButtonText: "取消",
  849. type: "warning",
  850. })
  851. .then(async () => {
  852. await proxy.downFile('/${genTable.ModuleName}/${genTable.BusinessName}/export', { ...queryParams })
  853. })
  854. }
  855. $end
  856. $if(sub)
  857. /*********************${genTable.SubTable.FunctionName}子表信息*************************/
  858. const ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List = ref([])
  859. const checked${genTable.SubTable.ClassName} = ref([])
  860. const fullScreen = ref(false)
  861. const drawer = ref(false)
  862. /** ${genTable.SubTable.FunctionName}序号 */
  863. function row${genTable.SubTable.ClassName}Index({ row, rowIndex }) {
  864. row.index = rowIndex + 1;
  865. }
  866. /** ${genTable.SubTable.FunctionName}添加按钮操作 */
  867. function handleAdd${genTable.SubTable.ClassName}() {
  868. let obj = {};
  869. //下面的代码自己设置默认值
  870. $foreach(column in genTable.SubTable.Columns)
  871. $if(column.IsPK || column.CsharpField == genTable.SubTableFkName)
  872. $elseif(column.IsList == true && "" != column.CsharpField)
  873. //obj.${column.CsharpFieldFl} = null;
  874. $end
  875. $end
  876. ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value.push(obj);
  877. }
  878. /** 复选框选中数据 */
  879. function handle${genTable.SubTable.ClassName}SelectionChange(selection) {
  880. checked${genTable.SubTable.ClassName}.value = selection.map(item => item.index)
  881. }
  882. /** ${genTable.SubTable.FunctionName}删除按钮操作 */
  883. function handleDelete${genTable.SubTable.ClassName}() {
  884. if(checked${genTable.SubTable.ClassName}.value.length == 0){
  885. proxy.${modal}modal.msgError('请先选择要删除的${genTable.SubTable.FunctionName}数据')
  886. } else {
  887. const ${genTable.SubTable.ClassName}s = ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value;
  888. const checked${genTable.SubTable.ClassName}s = checked${genTable.SubTable.ClassName}.value;
  889. ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = ${genTable.SubTable.ClassName}s.filter(function(item) {
  890. return checked${genTable.SubTable.ClassName}s.indexOf(item.index) == -1
  891. });
  892. }
  893. }
  894. /** ${genTable.SubTable.FunctionName}详情 */
  895. function rowClick(row) {
  896. const id = row.${replaceDto.FistLowerPk} || ids.value
  897. get${genTable.BusinessName}(id).then((res) => {
  898. const { code, data } = res
  899. if (code == 200) {
  900. drawer.value = true
  901. ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = data.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav
  902. }
  903. })
  904. }
  905. $end
  906. handleQuery()
  907. </script>