index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div class="p-2">
  3. <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
  4. <div v-show="showSearch" class="mb-[10px]">
  5. <el-card shadow="hover">
  6. <el-form ref="queryFormRef" :model="queryParams" :inline="true">
  7. <el-form-item label="税率编号" prop="taxrateNo">
  8. <el-input v-model="queryParams.taxrateNo" placeholder="请输入税率编号" clearable @keyup.enter="handleQuery" />
  9. </el-form-item>
  10. <el-form-item label="税率名称" prop="taxrateName">
  11. <el-input v-model="queryParams.taxrateName" placeholder="请输入税率名称" clearable @keyup.enter="handleQuery" />
  12. </el-form-item>
  13. <el-form-item label="税率值)" prop="taxrate">
  14. <el-input v-model="queryParams.taxrate" placeholder="请输入税率值)" clearable @keyup.enter="handleQuery" />
  15. </el-form-item>
  16. <el-form-item label="数据来源" prop="dataSource">
  17. <el-input v-model="queryParams.dataSource" placeholder="请输入数据来源" clearable @keyup.enter="handleQuery" />
  18. </el-form-item>
  19. <el-form-item label="是否显示:1=是,0=否" prop="isShow">
  20. <el-input v-model="queryParams.isShow" placeholder="请输入是否显示:1=是,0=否" clearable @keyup.enter="handleQuery" />
  21. </el-form-item>
  22. <el-form-item label="平台标识" prop="platformCode">
  23. <el-input v-model="queryParams.platformCode" placeholder="请输入平台标识" clearable @keyup.enter="handleQuery" />
  24. </el-form-item>
  25. <el-form-item>
  26. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  27. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  28. </el-form-item>
  29. </el-form>
  30. </el-card>
  31. </div>
  32. </transition>
  33. <el-card shadow="never">
  34. <template #header>
  35. <el-row :gutter="10" class="mb8">
  36. <el-col :span="1.5">
  37. <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['product:taxrate:add']">新增</el-button>
  38. </el-col>
  39. <el-col :span="1.5">
  40. <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['product:taxrate:edit']">修改</el-button>
  41. </el-col>
  42. <el-col :span="1.5">
  43. <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['product:taxrate:remove']">删除</el-button>
  44. </el-col>
  45. <el-col :span="1.5">
  46. <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['product:taxrate:export']">导出</el-button>
  47. </el-col>
  48. <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
  49. </el-row>
  50. </template>
  51. <el-table v-loading="loading" border :data="taxrateList" @selection-change="handleSelectionChange">
  52. <el-table-column type="selection" width="55" align="center" />
  53. <el-table-column label="主键,自增ID" align="center" prop="id" v-if="true" />
  54. <el-table-column label="税率编号" align="center" prop="taxrateNo" />
  55. <el-table-column label="税率名称" align="center" prop="taxrateName" />
  56. <el-table-column label="税率值)" align="center" prop="taxrate" />
  57. <el-table-column label="数据来源" align="center" prop="dataSource" />
  58. <el-table-column label="是否显示:1=是,0=否" align="center" prop="isShow" />
  59. <el-table-column label="备注" align="center" prop="remark" />
  60. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  61. <template #default="scope">
  62. <el-tooltip content="修改" placement="top">
  63. <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['product:taxrate:edit']"></el-button>
  64. </el-tooltip>
  65. <el-tooltip content="删除" placement="top">
  66. <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['product:taxrate:remove']"></el-button>
  67. </el-tooltip>
  68. </template>
  69. </el-table-column>
  70. </el-table>
  71. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
  72. </el-card>
  73. <!-- 添加或修改产品税率配置对话框 -->
  74. <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
  75. <el-form ref="taxrateFormRef" :model="form" :rules="rules" label-width="80px">
  76. <el-form-item label="税率编号" prop="taxrateNo">
  77. <el-input v-model="form.taxrateNo" placeholder="请输入税率编号" />
  78. </el-form-item>
  79. <el-form-item label="税率名称" prop="taxrateName">
  80. <el-input v-model="form.taxrateName" placeholder="请输入税率名称" />
  81. </el-form-item>
  82. <el-form-item label="税率值)" prop="taxrate">
  83. <el-input v-model="form.taxrate" placeholder="请输入税率值)" />
  84. </el-form-item>
  85. <el-form-item label="数据来源" prop="dataSource">
  86. <el-input v-model="form.dataSource" placeholder="请输入数据来源" />
  87. </el-form-item>
  88. <el-form-item label="是否显示:1=是,0=否" prop="isShow">
  89. <el-input v-model="form.isShow" placeholder="请输入是否显示:1=是,0=否" />
  90. </el-form-item>
  91. <el-form-item label="备注" prop="remark">
  92. <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
  93. </el-form-item>
  94. </el-form>
  95. <template #footer>
  96. <div class="dialog-footer">
  97. <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
  98. <el-button @click="cancel">取 消</el-button>
  99. </div>
  100. </template>
  101. </el-dialog>
  102. </div>
  103. </template>
  104. <script setup name="Taxrate" lang="ts">
  105. import { listTaxrate, getTaxrate, delTaxrate, addTaxrate, updateTaxrate } from '@/api/pmsProduct/taxrate';
  106. import { TaxrateVO, TaxrateQuery, TaxrateForm } from '@/api/pmsProduct/taxrate/types';
  107. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  108. const taxrateList = ref<TaxrateVO[]>([]);
  109. const buttonLoading = ref(false);
  110. const loading = ref(true);
  111. const showSearch = ref(true);
  112. const ids = ref<Array<string | number>>([]);
  113. const single = ref(true);
  114. const multiple = ref(true);
  115. const total = ref(0);
  116. const queryFormRef = ref<ElFormInstance>();
  117. const taxrateFormRef = ref<ElFormInstance>();
  118. const dialog = reactive<DialogOption>({
  119. visible: false,
  120. title: ''
  121. });
  122. const initFormData: TaxrateForm = {
  123. id: undefined,
  124. taxrateNo: undefined,
  125. taxrateName: undefined,
  126. taxrate: undefined,
  127. dataSource: undefined,
  128. isShow: undefined,
  129. remark: undefined,
  130. }
  131. const data = reactive<PageData<TaxrateForm, TaxrateQuery>>({
  132. form: {...initFormData},
  133. queryParams: {
  134. pageNum: 1,
  135. pageSize: 10,
  136. taxrateNo: undefined,
  137. taxrateName: undefined,
  138. taxrate: undefined,
  139. dataSource: undefined,
  140. isShow: undefined,
  141. platformCode: undefined,
  142. params: {
  143. }
  144. },
  145. rules: {
  146. taxrateNo: [
  147. { required: true, message: "税率编号不能为空", trigger: "blur" }
  148. ],
  149. taxrateName: [
  150. { required: true, message: "税率名称不能为空", trigger: "blur" }
  151. ],
  152. taxrate: [
  153. { required: true, message: "税率值)不能为空", trigger: "blur" }
  154. ],
  155. dataSource: [
  156. { required: true, message: "数据来源不能为空", trigger: "blur" }
  157. ],
  158. isShow: [
  159. { required: true, message: "是否显示:1=是,0=否不能为空", trigger: "blur" }
  160. ],
  161. remark: [
  162. { required: true, message: "备注不能为空", trigger: "blur" }
  163. ],
  164. }
  165. });
  166. const { queryParams, form, rules } = toRefs(data);
  167. /** 查询产品税率配置列表 */
  168. const getList = async () => {
  169. loading.value = true;
  170. const res = await listTaxrate(queryParams.value);
  171. taxrateList.value = res.rows;
  172. total.value = res.total;
  173. loading.value = false;
  174. }
  175. /** 取消按钮 */
  176. const cancel = () => {
  177. reset();
  178. dialog.visible = false;
  179. }
  180. /** 表单重置 */
  181. const reset = () => {
  182. form.value = {...initFormData};
  183. taxrateFormRef.value?.resetFields();
  184. }
  185. /** 搜索按钮操作 */
  186. const handleQuery = () => {
  187. queryParams.value.pageNum = 1;
  188. getList();
  189. }
  190. /** 重置按钮操作 */
  191. const resetQuery = () => {
  192. queryFormRef.value?.resetFields();
  193. handleQuery();
  194. }
  195. /** 多选框选中数据 */
  196. const handleSelectionChange = (selection: TaxrateVO[]) => {
  197. ids.value = selection.map(item => item.id);
  198. single.value = selection.length != 1;
  199. multiple.value = !selection.length;
  200. }
  201. /** 新增按钮操作 */
  202. const handleAdd = () => {
  203. reset();
  204. dialog.visible = true;
  205. dialog.title = "添加产品税率配置";
  206. }
  207. /** 修改按钮操作 */
  208. const handleUpdate = async (row?: TaxrateVO) => {
  209. reset();
  210. const _id = row?.id || ids.value[0]
  211. const res = await getTaxrate(_id);
  212. Object.assign(form.value, res.data);
  213. dialog.visible = true;
  214. dialog.title = "修改产品税率配置";
  215. }
  216. /** 提交按钮 */
  217. const submitForm = () => {
  218. taxrateFormRef.value?.validate(async (valid: boolean) => {
  219. if (valid) {
  220. buttonLoading.value = true;
  221. if (form.value.id) {
  222. await updateTaxrate(form.value).finally(() => buttonLoading.value = false);
  223. } else {
  224. await addTaxrate(form.value).finally(() => buttonLoading.value = false);
  225. }
  226. proxy?.$modal.msgSuccess("操作成功");
  227. dialog.visible = false;
  228. await getList();
  229. }
  230. });
  231. }
  232. /** 删除按钮操作 */
  233. const handleDelete = async (row?: TaxrateVO) => {
  234. const _ids = row?.id || ids.value;
  235. await proxy?.$modal.confirm('是否确认删除产品税率配置编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
  236. await delTaxrate(_ids);
  237. proxy?.$modal.msgSuccess("删除成功");
  238. await getList();
  239. }
  240. /** 导出按钮操作 */
  241. const handleExport = () => {
  242. proxy?.download('product/taxrate/export', {
  243. ...queryParams.value
  244. }, `taxrate_${new Date().getTime()}.xlsx`)
  245. }
  246. onMounted(() => {
  247. getList();
  248. });
  249. </script>